UVA - 12083 (二分图最大匹配——最大独立集)
2017-08-21 20:44
471 查看
题目链接https://cn.vjudge.net/contest/180830#problem/C
分析:将每个人看做结点,可以根据性别得出一个二分图,如果两个人都不满足四个条件,则连一条无向边,找出最大独力集。
独立集:对于每条边,至少有一个点被选中
覆盖集:对于每条边,至少有一个点不被选中
最小覆盖集和最大独立集互补。
最大匹配 = 最小顶点覆盖
最大独立集 = 顶点个数 – 最小顶点覆盖(最大匹配)
代码如下:
分析:将每个人看做结点,可以根据性别得出一个二分图,如果两个人都不满足四个条件,则连一条无向边,找出最大独力集。
独立集:对于每条边,至少有一个点被选中
覆盖集:对于每条边,至少有一个点不被选中
最小覆盖集和最大独立集互补。
最大匹配 = 最小顶点覆盖
最大独立集 = 顶点个数 – 最小顶点覆盖(最大匹配)
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<iomanip> #include<cmath> #include<vector> #include<set> #include<queue> #include<map> #include<cmath> #include<stack> #define INF 0x3f3f3f3f #define pi acos(-1.0) #define lowbit(x) ((x)&(-x)) using namespace std; const int maxn=500+5; class node { public: int h; char sex; string mu,sport; }; node p[maxn]; int n; //判断条件,如果能成情侣,则返回正确 bool judge(node p,node q) { if(abs(p.h-q.h)>40||p.mu!=q.mu||p.sex==q.sex||p.sport==q.sport) return false; return true; } vector<int>res[maxn]; //构造边 int vis[maxn],match[maxn]; bool dfs(int u) { for(int i=0; i<res[u].size(); i++) { int v=res[u][i]; if(!vis[v]) { vis[v]=1; if(match[v]==-1||dfs(match[v])) { match[u]=v; match[v]=u; return true; } } } return false; } //初始化加输入 void init() { scanf("%d",&n); for(int i=0; i<n; i++) res[i].clear(); memset(match,-1,sizeof(match)); for(int i=0; i<n; i++) { scanf("%d%*c%c",&p[i].h,&p[i].sex); cin>>p[i].mu>>p[i].sport; } } int main() { int T; scanf("%d",&T); while(T--) { //满足关系的连边 init(); for(int i=0; i<n; i++) for(int j=i+1; j<n; j++) { if(judge(p[i],p[j])) { res[i].push_back(j); res[j].push_back(i); } } int ans=0; for(int i=0; i<n; i++) { if(p[i].sex=='F') //这个必须有,分男女匹配 { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } } cout<<n-ans<<endl; } }
相关文章推荐
- uva 12168(二分图最大匹配--最大独立集)
- UVA 12083 - Guardian of Decency(二分图最大匹配)
- UVA - 12083 Guardian of Decency 匈牙利算法(二分图最大匹配)
- C - Guardian of Decency UVA - 12083--二分图匹配+最大独立集( |最大独立集| = |V|-|最大匹配数|)
- UVA-12083 Guardian of Decency 二分图 最大独立集
- UVALive - 6887 Book Club (二分图求最大匹配||网络流求最大匹配)
- uva 11383(二分图最大权匹配)
- 二分图最大匹配,最小路径覆盖,最小点覆盖,最大独立集,最小边覆盖与建图方法
- CSU 1623 Inspectors(二分图最大权匹配 KM算法)(UVAlive 6879)
- HDU 2768Cat vs. Dog二分图 最大独立集(最大匹配)
- [HDOJ1068]Girls and Boys(二分图最大匹配,最大独立集)
- poj 3692(浅谈二分图最大匹配求最大独立集在解决最大团问题中的应用)
- UVA-12168 - Cat vs. Dog( 二分图最大独立集)
- 二分图最大匹配(匈牙利算法) UVA 670 The dog task
- UVaLive 6525 Attacking rooks (二分图最大匹配)
- 二分图最大匹配 & 最大独立集
- uva 12168 - Cat vs. Dog (最大匹配 ——最大独立集)
- la 3415, 12083 - Guardian of Decency 最大匹配,独立集,覆盖集
- UVALive - 4043 Ants (二分图最大权匹配)
- UVA - 12083 Guardian of Decency (匈牙利算法 求 最大独立集)