会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
c语言源码
HDU 2444
主要是dfs染色判断奇圈+二分匹配
#include<cstdio> #include<string.h> using namespace std; int map[210][210],col[210]; int n,m; int cx[210],cy[210]; bool mk[210]; bool dfs(int now){ int i; for(i=1;i<=n;i++) if(map[now][i]){ if(col[i]==-1){ col[i]=!col[now]; bool tem=dfs(i); if(tem==0) return 0; //一开始WA这里了 } else if(col[i]==col[now]) return 0; } return 1; } int path(int u){ int i; for(i=1;i<=n;i++){ if(map[u][i] && mk[i]==0){ mk[i]=1; if(cy[i]==0 || path(cy[i])){ cx[u]=i; cy[i]=u; return 1; } } } return 0; } int maxmatch(){ int i,j,u,v,sum=0; memset(cx,0,sizeof(cx)); memset(cy,0,sizeof(cy)); for(i=1;i<=n;i++){ if(cx[i]==0){ memset(mk,0,sizeof(mk)); sum+=path(i); } } return sum; } int main(){ int i,j,u,v; while(scanf("%d %d",&n,&m)==2){ if(n==1){ printf("No\n"); continue; } memset(map,0,sizeof(map)); for(i=1;i<=m;i++){ scanf("%d %d",&u,&v); map[u][v]=map[v][u]=1; } memset(col,-1,sizeof(col)); col[1]=1; if(dfs(1)==0){ printf("No\n"); continue; } printf("%d\n",maxmatch()/2); } }
posted on
2012-05-12 12:20
c语言源码
阅读(
171
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
导航
博客园
首页
新随笔
联系
订阅
管理
公告