(1183)SCU
来源:互联网 发布:asp.net 字符串转json 编辑:程序博客网 时间:2024/05/21 14:56
题意:这里先吐槽下题意,看了好久没看明白,偷偷百度的才知道题意,一共有n个人,男生和女生之间呢有恋爱关系。给你一系列恋爱的关系,但是你不知道谁是男生谁是女生。问你求一个集合,这个集合中的人不存在恋爱关系,求最大人数。
解法:二分图匹配,把最大的恋爱关系对数求出来,然后除以2,因为1-2,2-1,被算作2组,实际是一组,所以用总人数减去恋爱人数就是不存在恋爱关系的集合。
如果还是不明白看这里
http://blog.csdn.net/weyuli/article/details/9621973
他题意解释的很好。。
我再贴下自己的代码
#include<iostream>#include<cstdio>#include<string.h>#include<string>#include<stack>#include<set>#include<algorithm>#include<cmath>#include<vector>#include<map>#define LL __int64#define lll unsigned long long#define MAX 1000009#define eps 1e-8#define INF 0xfffffff#define pi 2*acos(0.0)#define mod 10007using namespace std;int ma[509][509];int n;int a[1009];int k[1009];int g[1009][1009];bool dfs(int x){ for(int i = 0; i<n; i++) { if(g[x][i]&&!k[i]) { k[i] = 1; if(a[i]==-1||dfs(a[i])) { a[i] = x; return true; } } } return false;}int main(){ int sum; int num; int xx,yy,zz; string str; while(~scanf("%d",&n)) { getchar(); memset(g,0,sizeof(g)); memset(a,-1,sizeof(a)); for(int i = 0; i<n; i++) { scanf("%d: (%d)",&num,&xx); for(int k=1;k<=xx;k++) { scanf("%d",&yy); g[i][yy] = 1; } } sum = 0; for(int i = 0;i<n;i++) { memset(k,0,sizeof(k)); if(dfs(i)) { sum++; } } int ans = n - sum/2; printf("%d\n",ans); } return 0;}
0 0
- (1183)SCU
- SCU
- SCU
- SCU
- SCU
- 【SCU
- SCU
- SCU
- SCU
- (SCU
- SCU
- SCU
- SCU
- SCU
- scu 3329
- (2035)SCU
- SCU 4440
- SCU 4436
- 代码重构技巧方法
- 准备蓝桥杯--dyx--杨辉三角形
- HDU(3787)——A+B
- 批处理实现添加java环境变量
- 如何组装配置属于自己的台式机
- (1183)SCU
- 欧几里德算法(最大公约数)
- android 解析json数据格式
- Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
- A and B and Interesting Substrings cf294
- mmap那些事之android property实现之二
- 2015/3/19 文献阅读笔记
- layoutSubviews总结
- canvas.drawRoundRect方法,绘制圆角矩形