http://poj.org/problem?id=1466&&Girls and Boys

来源:互联网 发布:解放军知乎 编辑:程序博客网 时间:2024/06/03 17:13

最大独立集=顶点-最大匹配,因为这里最大匹配被重复匹配故最大匹配数除二。。。做这一类题难就难在建图上,,,建图建好了一切ok。。。。。

#include<iostream>#include<string.h>#include<vector>#define N 501using namespace std;int match[N];int visit[N];vector<int>map[N];bool dfs(int x){ int m=map[x].size();  for(int i=0;i<m;++i)  {  int v=map[x][i];      if(!visit[v])  { visit[v]=true;    if(match[v]==-1||dfs(match[v])){   match[v]=x;   return true;}  }  }  return false;}int main(){   int n;   while(cin>>n)   { memset(match,-1,sizeof(match));      for(int i=0;i<n;++i)  map[i].clear();  for(int i=0;i!=n;++i)  { int m,t;    char a,b,c;cin>>m>>a>>b>>t>>c;for(int j=0;j!=t;++j){ int s;  cin>>s;  map[m].push_back(s);}  }  int ans=0;  for(int i=0;i!=n;++i)  { memset(visit,false,sizeof(visit));     if(dfs(i)) ans++;  }  cout<<n-ans/2<<endl;   }return 0;}