1 #include<stdio.h> 2 #include<string.h> 3 int w,m, head[10005],point[10005],next[10005],y[10005],link[10005],now; 4 void add(int x,int y) 5 { 6 //now是边的数目 7 next[++now]=head[x];//next数组引向下一条头为x的边 8 head[x]=now; //head数组引向一条头为x的边 9 point[now]=y;//当前边的尾 10 } 11 int dfs(int v) 12 { 13 int i,u; 14 for (i=head[v];i!=0;i=next[i]) 15 if(y[point[i]]==0) 16 { 17 u=point[i]; 18 y[u]=1; 19 if (link[u]==0||dfs(link[u])==1) 20 { 21 link[u]=v; 22 return 1; 23 } 24 } 25 return 0; 26 } 27 int main() 28 { 29 int k,i,p,q,ans; 30 while (~scanf("%d",&k)&&k) 31 { 32 scanf("%d%d",&w,&m); 33 memset(link,0,sizeof(link)); 34 memset(head,0,sizeof(head)); 35 now=0; 36 for (i=1;i<=k;i++) 37 { 38 scanf("%d%d",&p,&q); 39 add(p,q+w); 40 } 41 ans=0; 42 for (i=1;i<=w;i++) 43 { 44 memset(y,0,sizeof(y)); 45 if (dfs(i)==1) ans++; 46 } 47 printf("%d\n",ans); 48 } 49 }
转载于:https://www.cnblogs.com/xiao-xin/articles/3876703.html