poj 1466 二分图 最大独立集
2013-08-23 21:45
323 查看
传送门
题意:有n个人,有的之间有爱慕关系,问最多能找出多少个人使得找出的人中没有爱慕关系。
思路:二分图啊,最大独立集=点数-最大匹配数。
一开始想染色分性别来搞,后来发现没有必要,左边从0到n-1,右边也0到n-1,有爱慕关系的连线,然后找最大匹配数,注意,这样找到的最大匹配数是有爱慕关系的对数的2倍,也就是实际的最大匹配数是这个的一般,然后减一下就好了。
反省:手贱,把int l[505]写成了int l[105],然后wa了两发,该醒醒了。
题意:有n个人,有的之间有爱慕关系,问最多能找出多少个人使得找出的人中没有爱慕关系。
思路:二分图啊,最大独立集=点数-最大匹配数。
一开始想染色分性别来搞,后来发现没有必要,左边从0到n-1,右边也0到n-1,有爱慕关系的连线,然后找最大匹配数,注意,这样找到的最大匹配数是有爱慕关系的对数的2倍,也就是实际的最大匹配数是这个的一般,然后减一下就好了。
反省:手贱,把int l[505]写成了int l[105],然后wa了两发,该醒醒了。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,l[505],p[505][505],ans; bool vis[505]; bool go(int x) { for(int i=0;i<n;i++) { if(!vis[i]&&p[x][i]) { vis[i]=1; if(l[i]==-1||go(l[i])) { l[i]=x; return true; } } } return false; } int main() { int u,num,v; while(scanf("%d",&n)!=EOF) { memset(p,0,sizeof(p)); memset(l,-1,sizeof(l)); for(int i=0;i<n;i++) { scanf("%d: ",&u); scanf("(%d) ",&num); for(int j=0;j<num;j++) { scanf("%d",&v); p[u][v]=1; } } ans=0; for(int i=0;i<n;i++) { memset(vis,0,sizeof(vis)); if(go(i))ans++; } printf("%d\n",n-ans/2); } return 0; }
相关文章推荐
- POJ 1466:Girls and Boys 二分图的最大点独立集
- POJ 1466 二分图最大独立集.cpp
- POJ 1466 Girls and Boys【二分图_最大独立集】
- POJ1466 Girls and Boys【二分图最大独立集】
- POJ-1466-Girls and Boys(二分图最大独立集)
- poj 1466 Girls and Boys(二分图的最大独立集)
- poj 1466 Girls and Boys 二分图 最大独立集 (★★☆☆☆)
- POJ 1466 Girls and Boys(二分图最大独立集)
- POJ 1466 && ZOJ 1137--Girls and Boys【二分图 && 最大点独立集】
- POJ - 1466 Girls and Boys 二分图+最大独立集
- poj 1466 Girls and Boys (二分图最大独立集)
- HDU1068,POJ1466——Girls and Boys(二分图最大独立集)
- POJ 1466 Girls and Boys(二分图最大独立集)
- POJ1466 二分图最大独立集[有陷阱的一道题]
- POJ-1466-Girls and Boys(二分图最大独立集)
- POJ1466 二分图最大独立集[有陷阱的一道题]
- 最大独立集,二分图最大匹配 poj 1466
- POJ 1466 Girls and Boys(二分图最大独立集)
- 【二分图|最大点独立集】POJ-1466 Girls and Boys
- POJ - 1466 Girls and Boys 二分图+最大独立集