Girls and Boys---hdu1068(最大独立集=顶点数-最大匹配)
2016-07-12 14:40
585 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068
题意:有n个人,他们之间存在着恋爱关系,现在告诉你每个人和其他人的关系,然后要从这n个人间选出尽可能多的人组成一个集合,使得集合中的人之间不存在恋爱关系;
符合最大独立集的定义所以是顶点数-最大匹配
View Code
题意:有n个人,他们之间存在着恋爱关系,现在告诉你每个人和其他人的关系,然后要从这n个人间选出尽可能多的人组成一个集合,使得集合中的人之间不存在恋爱关系;
符合最大独立集的定义所以是顶点数-最大匹配
#include<stdio.h> #include<string.h> #include<algorithm> #include<vector> #include<queue> #include<string> #include<stack> #include<map> using namespace std; #define N 510 #define INF 0x3f3f3f3f #define met(a, b) memset(a, b, sizeof(a)) int n, used , G , vis ; int Find(int u) { for(int i=0; i<n; i++) { if(!vis[i] && G[u][i]) { vis[i] = 1; if(!used[i] || Find(used[i])) { used[i] = u; return 1; } } } return 0; } int main() { while(scanf("%d", &n) != EOF) { met(G, 0); for(int i=0; i<n; i++) { int u, v, k; scanf("%d: (%d)", &u, &k); for(int j=1; j<=k; j++) { scanf("%d", &v); G[u][v] = 1; } } int ans = 0; met(used, 0); for(int i=0; i<n; i++)///计算了两次,所以下面要除以2; { met(vis, 0); ans+=Find(i); } printf("%d\n", n-ans/2); } return 0; }
View Code
相关文章推荐
- 插入排序
- 将数据导出到Excel(java操作Excel)
- Android 补间动画
- Swipemenulistview的使用 4000
- Apk脱壳之—脱掉“360加固”的壳
- android studio加载程序太慢了,给你解决方案
- SwiftDate 浅析
- 开窗函数 First_Value 和 Last_Value
- test
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- SVN switch 用法详解
- LeetCode 350. Intersection of Two Arrays II
- Java中的锁
- 【bzoj4552】【Tjoi2016&Heoi2016】【NOIP2016模拟7.12】排序
- Reverse Bits
- 7.12 noip2103提高组复赛day2
- RabbitMQ消息队列(二):”Hello, World“
- Java常用代码工具类相关
- Trilateration三边测量定位算法
- 刚刚提取了金山毒霸的[垃圾清理] 和 [隐私清理], 分享方法,大家可以自己试一下