标签:scanf can amp 二分图 mem contract add 分享 img
男女进行二分图匹配,裸题
1 #include<stdio.h>
2 #include<string.h>
3 int now,head[1001],next[1001],point[1001],visit[1001],match[1001];
4
5 void add(int x,int y){
6 next[++now]=head[x];
7 head[x]=now;
8 point[now]=y;
9 }
10
11 int dfs(int k)
12 {
13 for(int i=head[k];i;i=next[i]) if(!visit[point[i]]){
14 int p=point[i];
15 visit[p]=1;
16 if(match[p]==-1||dfs(match[p])){
17 match[p]=k;
18 return 1;
19 }
20 }
21 return 0;
22 }
23
24 int main(){
25 int K,M,N;
26 while(scanf("%d",&K)!=EOF&&K!=0){
27 scanf("%d%d",&M,&N);
28 memset(match,-1,sizeof(match));
29 memset(head,0,sizeof(head));
30 now=0;
31 int i,ans=0;
32 for(i=1;i<=K;i++){
33 int a,b;
34 scanf("%d%d",&a,&b);
35 add(a,b);
36 }
37 for(i=1;i<=M;i++){
38 memset(visit,0,sizeof(visit));
39 if(dfs(i)==1)ans++;
40 }
41 printf("%d\n",ans);
42 }
43 return 0;
44 }
标签:scanf can amp 二分图 mem contract add 分享 img
原文地址:http://www.cnblogs.com/cenariusxz/p/6577939.html