1109. Conference(二分图)

1109

二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因

这题就是说 有n+m个人参加会议 要在这n+m中进行通话 求最少的连接数 就是每个人都得被连接上 这样求最大匹配就是了 再用总结点数减匹配的

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 using namespace std;
 8 vector<int>ed[2010];
 9 int n,m,k,vis[2010],link[2010];
10 int find(int u)
11 {
12     int i;
13     for(i = 0 ; i < (int)ed[u].size() ; i++)
14     {
15         int v = ed[u][i];
16         if(vis[v])
17         continue;
18         vis[v] = 1;
19         if(link[v]==0||find(link[v]))
20         {
21             link[v] = u;
22             return 1;
23         }
24     }
25     return 0;
26 }
27 int main()
28 {
29     int i,u,v;
30     scanf("%d%d%d",&n,&m,&k);
31     for(i = 1; i <= k ; i++)
32     {
33         scanf("%d%d",&u,&v);
34         ed[u].push_back(v+n);
35         ed[v+n].push_back(u);
36     }
37     int num=0;
38     for(i = 1; i <= n ; i++)
39     {
40         memset(vis,0,sizeof(vis));
41         if(find(i))
42         num++;
43     }
44     printf("%d
",n+m-2*num+num);
45     return 0;
46 }
View Code
原文地址:https://www.cnblogs.com/shangyu/p/3354793.html