HUD(2444)
来源:互联网 发布:mac air 重装系统 编辑:程序博客网 时间:2024/06/03 17:20
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2444
就会给你n个人,m个朋友关系,然后让你判断是否能把他们分成两组
然后里面谁也不认识对方
如果能,输出最大的组的人数
然后里面谁也不认识对方
如果能,输出最大的组的人数
解法,先判断二分图,然后在二分图匹配
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;struct node{ int v,u; int next;}V[1000*1000];int n,m;int tol; int head[1000];int col[1000];int link[1000];bool vis[1000];void init(){ int tol=0; memset(head,-1,sizeof(head));}void add(int u,int v){ V[tol].v=v; V[tol].u=u; V[tol].next=head[u]; head[u]=tol++; int t=u;u=v;v=t; V[tol].v=v; V[tol].u=u; V[tol].next=head[u]; head[u]=tol++; }bool dfs(int u){ vis[u]=1; for(int k=head[u];k!=-1;k=V[k].next) { int v=V[k].v; if(!vis[v]) { vis[v]=1; if(link[v]==-1||dfs(link[v])) { link[v]=u; return true; } } } return false;} int match(){ int ans=0; memset(link,-1,sizeof(link)); for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } return ans;}bool bldfs(int u,int co){ int i,v; col[u]=co; for(i=head[u];i!=-1;i=V[i].next) { v=V[i].v; if(col[v]==co) return false; if(col[v]==-1&&!bldfs(v,co^1)) return false; } return true;}int main(){ while(scanf("%d %d",&n,&m)!=EOF) { init(); int u,v; for(int i=0;i<m;i++) { scanf("%d %d",&u,&v); add(u,v); add(v,u); } memset(col,-1,sizeof(col)); int flag=0; for(int i=1;i<=n;i++) { if(col[i]==-1) if(!bldfs(i,1)) { flag=1; break; } } if(flag==1) printf("No\n"); else { int ans=match(); printf("%d\n",ans/2); } } return 0;}
0 0
- HUD(2444)
- HUD
- HUD 1000
- HUD 1033
- HUD 4038
- HUD P1561
- HUD 4473
- HUD 4502
- Hud 4608
- hud 2073
- hud 1518
- HUD-1142
- Unity HUD
- UDK HUD
- hud 2795
- hud 4288
- hud Fibonacci
- hud 4790
- 串口通信的相关概念和理解原理
- Uva753
- Uva11045
- Uva(10594)
- Uva(10158)
- HUD(2444)
- 解决几个服务的小问题
- VC6/WTL/Platform SDK等
- Android TabLayout重设Tab点击事件
- hdu2680
- 1475 建设国家
- Uva11374
- Android自定义开关按钮
- 微信调用jssdk在网页端实现调用扫一扫,java+jsp