hdu 1068 Girls and Boys(最大独立集,二分匹配)

 

http://acm.hdu.edu.cn/showproblem.php?pid=1068

 

题目大意:n个人,叫你求最大独立集,所以就是要求最大二分匹配了。    最大独立集 = 顶点数-最大匹配数

 

#include <iostream> #include <vector> #define SIZE 1005 using namespace std; bool visited[SIZE]; int Match[SIZE];/*i与谁配对了,-1则没有配对*/ vector<int>List[SIZE]; bool dfs(int locate) { int len = List[locate].size(),i,j; for (i=0;i<len;i++) { j = List[locate][i];/*取出邻接点*/ if (!visited[j]) { visited[j] = 1; if (Match[j]==-1||dfs(Match[j])) { Match[j] = locate; return true; } } } return false; } void init(int n) { int i,idx,x,val; for (i=0;i<n;i++) { scanf("%d: (%d)",&idx,&x); while (x--) { scanf("%d",&val); List[idx].push_back(val); } } } int main() { int n,i,NumOfMatch; while (scanf("%d",&n)!=EOF) { init(n); NumOfMatch = 0; memset(Match,-1,sizeof(Match)); for(i=0;i<n;i++) { memset(visited,0,sizeof(visited)); if(dfs(i)) NumOfMatch++; } printf("%d/n",n-NumOfMatch/2); for(i=0;i<n;i++) List[i].clear(); } return 0; }

你可能感兴趣的:(hdu 1068 Girls and Boys(最大独立集,二分匹配))