首页 > 代码库 > HDU 1068 Girls and Boys
HDU 1068 Girls and Boys
题目大意:
有一些男女生之间的暧昧关系,求找到一组人数最多的,组中任何两人都没有暧昧关系的情况‘
直接建图,求一个最大独立集
二分图中最大独立集 = 总数 - 最大匹配数
1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 const int N = 1005; 6 int g[N][N] , cx[N] , cy[N] , visy[N] , n; 7 8 int dfs(int u) 9 {10 for(int i=0 ; i<n ; i++){11 if(g[u][i] && !visy[i]){12 visy[i] = 1;13 if(cy[i] == -1 || dfs(cy[i])){14 cx[u] = i;15 cy[i] = u;16 return 1;17 }18 }19 }20 return 0;21 }22 23 int MaxMatch()24 {25 int ans = 0;26 memset(cx , -1 , sizeof(cx));27 memset(cy , -1 , sizeof(cy));28 for(int i=0 ; i<n ; i++){29 if(cx[i] == -1){30 memset(visy , 0 , sizeof(visy));31 ans += dfs(i);32 }33 }34 return ans;35 }36 37 int main()38 {39 // freopen("a.in" , "r" , stdin);40 while(scanf("%d" , &n) == 1)41 {42 int id , k , match;43 memset(g , 0 , sizeof(g));44 for(int i=0 ; i<n ; i++){45 scanf("%d: (%d)" , &id , &k);46 for(int j=0 ; j<k ; j++){47 scanf("%d" , &match);48 g[id][match] = 1;49 }50 }51 printf("%d\n" , n-MaxMatch()/2);//因为男女生重复匹配了,所以要除以252 }53 return 0;54 }
HDU 1068 Girls and Boys
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。