首页 > 代码库 > hdu 1068 最大独立集合
hdu 1068 最大独立集合
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 题意:题意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数。 题解: 独立集:图的顶点集的子集,其中任意两点不相邻 最大独立集 = 顶点数 - 最大匹配数 zsd:由于本题是从整个点集搜索,并不是将点集分开成(A)(B),(1->2)(2->1)对称存在,所以相当于搜索了两遍<br>#include<iostream> using namespace std; int n,map[1555][1555],pre[1555],v[1555]; int dfs( int k) { for ( int i=0;i<n;i++) { if (v[i]||!map[i][k]||i==k) continue ; v[i]=1; if (pre[i]==-1||dfs(pre[i])) { pre[i]=k; return 1; } } return 0; } int main() { int a,b,t,i,j,count; char f; while (cin>>n) { memset (map,0, sizeof (map)); for (i=1;i<=n;i++) { //scanf("%d:(%d)",&a,&t); cin>>a>>f>>f>>t>>f; for (j=1;j<=t;j++) { cin>>b; map[a][b]=map[b][a]=1; } } memset (pre,-1, sizeof (pre)); count=0; for (i=0;i<n;i++) { memset (v,0, sizeof (v)); if (dfs(i)) count++; } cout<<n-count/2<<endl; } return 0; } |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。