二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因
这题就是说 有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 }