二分图的定义,以及判断图是否为二分图都很简单了。
现在要说二分图的最大匹配。
首先是定义吧,完美匹配就是一一对应,而最大匹配则是最大可以匹配的条数
完美匹配一定是最大匹配,图中不一定都有完美匹配。
1 int dfs(int u) 2 { 3 for(int i=Link[u];i;i=e[i].next) 4 { 5 int v=e[i].y; 6 if(!bok[v]) 7 { 8 bok[v]=1; 9 if(!cy[v]||dfs(cy[v])) 10 { 11 cx[u]=v; 12 cy[v]=u; 13 return 1; 14 } 15 } 16 } 17 return 0; 18 }
1 for(int i=1;i<=n;i++) 2 { 3 for(int j=1;j<=m;j++) 4 bok[j]=0; 5 if(dfs(i)) 6 ans++; 7 } 8 if(ans>=n) printf("YES "); 9 else printf("NO ");
第二个就是ans的定义不是有几种不同的匹配方案,而是匹配数。
当ans〉=一边端点时,才有一个完美匹配。