hdu1068 Girls and Boys 二分匹配
2013-11-01 18:03
309 查看
题目链接:
二分匹配的应用
求最大独立集
最大独立集等于=顶点数-匹配数
本体中由于男孩和女孩的学号是不分开的,所以匹配数应是求得的匹配数/2
代码:
二分匹配的应用
求最大独立集
最大独立集等于=顶点数-匹配数
本体中由于男孩和女孩的学号是不分开的,所以匹配数应是求得的匹配数/2
代码:
#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> using namespace std; #define maxn 500 int g[maxn][maxn]; int vis_x[maxn]; int vis_y[maxn]; int cx[maxn]; int cy[maxn]; int n; int ans; int path(int u) { vis_x[u]=1; for(int v=0;v<n;v++) { if(vis_y[v]==0 && g[u][v]!=0) { vis_y[v]=1; if(cy[v]==-1 || path(cy[v])) { cx[u]=v; cy[v]=u; return 1; } } } return 0; } void MaxMatch() { memset(cx,-1,sizeof(cx)); memset(cy,-1,sizeof(cy)); for(int i=0;i<n;i++) { if(cx[i]==-1) { memset(vis_x,0,sizeof(vis_x)); memset(vis_y,0,sizeof(vis_y)); ans+=path(i); } } } int main() { while(scanf("%d",&n)!=EOF) { int id; int num; char c; ans=0; memset(g,0,sizeof(g)); for(int i=0;i<n;i++) { scanf("%d: (%d)", &id,&num); for(int j=0;j<num;j++) { int b; scanf("%d",&b); g[id][b]=1; } } MaxMatch(); cout<<n-ans/2<<endl; } return 0; }
相关文章推荐
- 【二分匹配】HDU1068-Girls and Boys
- 二分匹配 HDU1068 Girls and Boys
- HDU 1068 Girls and Boys【二分匹配之最大独立集】
- hdu 1068 Girls and Boys(最大独立集,二分匹配)
- POJ1466 Girls and Boys(二分匹配 匈牙利算法)
- hdu-1068 Girls and Boys(二分匹配)
- HDU 1068 Girls and Boys(二分匹配--匈牙利算法)
- Girls and Boys (二分匹配)
- hduoj-----(1068)Girls and Boys(二分匹配)
- hdu1068 Girls and Boys(二分匹配)
- Girls and Boys(二分匹配)
- Girls and Boys【二分匹配之最大独立集】
- hdu 1068 Girls and Boys (二分匹配)
- poj 1466 Girls and Boys(二分匹配之最大独立集)
- Girls and Boys HDU (二分匹配入门题)
- hdu1068(二分)Girls and Boys
- Girls and Boys (二分匹配)
- hdu 1068 Girls and Boys (二分匹配)
- POJ 1466 Girls and Boys 黑白染色 + 二分匹配 (最大独立集) 好题
- hdu 1068 Girls and Boys (二分匹配)