[二分图]最大匹配

二分图的定义,以及判断图是否为二分图都很简单了。

现在要说二分图的最大匹配。

首先是定义吧,完美匹配就是一一对应,而最大匹配则是最大可以匹配的条数

完美匹配一定是最大匹配,图中不一定都有完美匹配。

 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\n");
9         else    printf("NO\n");

第二个就是ans的定义不是有几种不同的匹配方案,而是匹配数。

当ans〉=一边端点时,才有一个完美匹配。

 

posted @ 2019-07-09 16:47  kaike  阅读(204)  评论(0编辑  收藏  举报