最大独立集——hdu3829
2011-07-20 15:45
162 查看
最大独立集: 在N个点的图G中选出m个点,使这m个点两两之间没有边,求m最大值。如果图G满足二分图条件,则可以用二分图匹配来做。最大独立集点数 = N - 最大匹配数。
将孩子看成二分图里的 A,B集
若孩子a喜欢的动物号是孩子b喜欢的动物号
则连边,因为A,B集是同类,无向图
map[a][b]=1;map[b][a]=1;
实际上就是
最大独立集=顶点数-最大匹配数/2
View Code
将孩子看成二分图里的 A,B集
若孩子a喜欢的动物号是孩子b喜欢的动物号
则连边,因为A,B集是同类,无向图
map[a][b]=1;map[b][a]=1;
实际上就是
最大独立集=顶点数-最大匹配数/2
View Code
#include<stdio.h> #include<string.h> bool map[509][509]; int mark[509]; bool flag[509]; int m; char A[509][9]; char B[509][9]; bool dfs(int x) { int i; for(i=1;i<=m;i++) { if(map[x][i]==0||flag[i]) continue; flag[i]=1; if(mark[i]==0||dfs(mark[i])) { mark[i]=x; return 1; } } return 0; } int main() { int i,g,k,j; int count; while(scanf("%*d%*d%d",&k)!=EOF) { g=m=k; memset(map,0,sizeof(map)); memset(mark,0,sizeof(mark)); count=0; for(i=1;i<=k;i++) { scanf("%s",A[i]); scanf("%s",B[i]); } for(i=1;i<=k;i++) { for(j=1;j<=k;j++) { if(strcmp(A[i],B[j])==0) { map[i][j]=1; // map[j][i]=1; } } } for(i=1;i<=g;i++) { memset(flag,0,sizeof(flag)); if(dfs(i)==1) count++; } printf("%d\n",k-count/2); } }
相关文章推荐
- hdu3829最大独立集
- Cat VS Dog---hdu3829(最大独立集)
- hdu3829(最大独立集)
- 二分图最大独立集题目汇总 HDU3829,POJ1446、2771
- HDU3829 Cat VS Dog(二分图最大独立集)
- kuangbin专题十 HDU3829 二分图+最大独立集
- HDU3829(KB10-J 二分图最大独立集)
- hdu3829 二分匹配 最大独立集
- hdu3829 二分匹配 最大独立集
- HDU3829 Cat VS Dog(最大独立集)
- hdu3829 Cat VS Dog(二分最大独立集)
- HDU3829Cat VS Dog(二分图最大独立集)
- hdu3829-Cat VS Dog(最大独立集,匹配问题)
- hdu3829(二分图,最大独立集)
- hdu3829 二分图的最大独立集
- 【bzoj3175】【TJOI2013】【攻击装置】【二分图最大独立集】
- HDU 1068 Girls and Boys 最大独立集 二分图匹配
- hdu 3829 最大独立集
- HDU 1068 Girls and Boys 最大独立集
- hdu4619-网络流-最大独立集-或者是二分图