标签:
对二分图一边的每一个点 dfs ,寻找它的所有匹配点,若那个匹配点没有匹配过或匹配的另一半能新找一个点与之匹配,那么就重组后分别匹配,否则不能匹配
1 int dfs(int k) 2 { 3 for(int i=head[k];~i;i=next[i]) 4 if(!visit[point[i]]){ 5 int p=point[i]; 6 visit[p]=1; 7 if(match[p]==-1||dfs(match[p])){ 8 match[p]=k; 9 return 1; 10 } 11 } 12 return 0; 13 } 14 15 for(i=1;i<=M;i++){ 16 memset(visit,0,sizeof(visit)); 17 if(dfs(i)==1)ans++; 18 }
标签:
原文地址:http://www.cnblogs.com/cenariusxz/p/4455152.html