poj1466 Girls and Boys
2015-02-23 15:14
253 查看
#include <iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; const int MAX=500; bool used[MAX],ma[250][250]; int boy,gril,m,match[MAX],s; vector<int> g[MAX]; bool dfs(int v) { used[v]=true; for(int i=0;i<g[v].size();i++) { int &u=g[v][i],w=match[u]; if(w<0||!used[w]&&dfs(w)) { match[u]=v; match[v]=u; return true; } } return false; } int matching() { int ans=0; memset(match,-1,sizeof(match)); for(int i=1;i<=s;i++) { if(match[i]<0) { memset(used,0,sizeof(used)); if(dfs(i)) ans++; } } return ans; } int main() { int num=0; while(cin>>boy>>gril>>m,boy||gril||m) { num++; s=boy+gril; for(int i=0;i<MAX;i++) g[i].clear(); memset(ma,0,sizeof(ma)); int u,v; for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); ma[u][v]=true; } for(int i=1;i<=boy;i++) { for(int j=1;j<=gril;j++) { if(ma[i][j]==false) { g[i].push_back(j+boy); g[j+boy].push_back(i); } } } cout<<"Case "<<num<<": "<<s-matching()<<endl; } return 0; }
此题的关键在于转换
此图的补图的最大独立集即是本题的解。
把相互不熟的boy and gril连在一起,那么这张图的最大独立集里面的元素则是两两之间没有联系,即相互之间都熟悉。
相关文章推荐
- POJ 1466 Girls and Boys
- POJ 1466 Girls and Boys
- poj 1466 Girls and Boys
- POJ 1466 Girls and Boys (ZOJ 1137 )最大独立点集
- POJ-1466-Girls and Boys
- poj 1466 Girls and Boys
- poj 1466 Girls and Boys 二分图-最大独立子集
- POJ-1466 Girls and Boys 二分图+拆点构图
- poj 1466 Girls and Boys 最大独立集
- zoj 1137 Girls and Boys(poj 1466)(最大独立点集)
- POJ 1466 Girls and Boys(匈牙利算法—最大独立集)
- POJ 1466 Girls and Boys (最大独立集Hungary)
- POJ 1466 Girls and Boys (最大独立点集)
- POJ 1466 Girls and Boys
- POJ 1466 Girls and Boys 二分图
- POJ 1466 Girls and Boys【二分图_最大独立集】
- poj1466 - Girls and Boys
- poj 1466 Girls and Boys (最大独立)
- POJ 1466 Girls and Boys (ZOJ 1137 )最大独立点集
- poj&nbsp;1466&nbsp;Girls&nbsp;and&nbsp;Boys(最大独立…