HDU - 2063: 过山车

简介: HDU - 2063: 过山车

题目链接:点击打开链接

题目大意:略。

解题思路:二分图最大匹配 + 匈牙利算法。

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=520;
int k,un,vn;
int vis[maxn], linker[maxn], g[maxn][maxn];
void init()
{
    mem(linker,-1);
    mem(g,0);
}
int dfs(int u)
{
    for(int i=1;i<=vn;i++)
    {
        if(!vis[i]&&g[u][i])
        {
            vis[i]=1;
            if(linker[i]==-1 || dfs(linker[i]))
            {
                linker[i]=u;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    while(~scanf("%d",&k) && k)
    {
        scanf("%d%d",&un,&vn);
        init();
        int u,v;
        while(k--)
        {
            scanf("%d%d",&u,&v);
            g[u][v]=1;
        }
        int rs=0;
        for(int i=1;i<=un;i++)
        {
            mem(vis,0);
            if(dfs(i)) rs++;
        }
        printf("%d\n",rs);
    }
    return 0;
}
目录
相关文章
|
7月前
|
C++
【PTA】L1-035 情人节(C++)
【PTA】L1-035 情人节(C++)
68 0
【PTA】L1-035 情人节(C++)
HDU1276士兵队列训练问题
HDU1276士兵队列训练问题
hdu 1276 士兵队列训练问题
hdu 1276 士兵队列训练问题
416 0
忆pta水题
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 结尾无空行 输出样例: 1 2 5 4 8 
HDU-2897,邂逅明下(巴什博弈)
HDU-2897,邂逅明下(巴什博弈)
|
测试技术
HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
125 0
|
人工智能 测试技术
|
人工智能 Java C++
HDU 3785 寻找大富翁
寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6716    Accepted Submission(s): 2492 Problem Description 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
1103 0