Uva12880(二分匹配)

来源:互联网 发布:php函数list 编辑:程序博客网 时间:2024/05/20 18:49

图书俱乐部

题意:每人带一本图书,和另一个人交换。当然,大家都希望能换到自己喜欢的书。

题意:给出参与人数,以及一些包含2个整数的信息。例如1 2(代表1喜欢2的书)

题意:判断是否所有人都能换到自己喜欢的书。

简单的二分匹配。。。。。。

为了加快速度,使用了自己建图的方式

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<climits>using namespace std;#define M 20010#define N 10010int Head[N], Next[M], Key[M];int match[N];bool use[N];int num;int n,m;void add(int u, int v){Key[num] = v;Next[num] = Head[u];Head[u] = num++;}bool find(int u){int temp;for(int i = Head[u]; i != -1; i = Next[i]){temp = Key[i];if(!use[temp]){use[temp] = true;if(match[temp] == -1 || find(match[temp])){match[temp] = u;return true;}}}return false;}void hungary(){int sum = 0;for(int i = 0; i < n; ++i){memset(use, false, sizeof(use));if(find(i))sum++;}sum==n?puts("YES"):puts("NO");}int main(){while(scanf("%d%d", &n,&m) != EOF){num = 0;memset(match, -1, sizeof(match));memset(Head, -1, sizeof(Head));for(int i = 0; i < m; ++i){    int a,b;scanf("%d%d", &a, &b);add(a,b);}hungary();}return 0;}


0 0
原创粉丝点击