博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2444判定二分图+最大匹配
阅读量:6610 次
发布时间:2019-06-24

本文共 1698 字,大约阅读时间需要 5 分钟。

两连发板子题,水果留恋

#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;const int maxn=208;struct shit{ int v,next;}edge[maxn*maxn<<1];int tol;int head[maxn];void init(){ tol=0; memset(head,-1,sizeof(head));}void addedge(int u,int v){ edge[tol].v=v; edge[tol].next=head[u]; head[u]=tol++;}int color[maxn];bool judfs(int u,int co){ int i,v; color[u]=co; for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].v; if(color[v]==co) return false; if(color[v]==-1&&!judfs(v,co^1)) return false; } return true;}bool vis[maxn];int pre[maxn];bool find(int u){ int i,v; for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].v; if(vis[v]) continue; vis[v]=true; if(pre[v]==-1||find(pre[v])) { pre[v]=u; return true; } } return false;}int hungary(int n){ int i,ans; memset(pre,-1,sizeof(pre)); ans=0; for(i=1;i<=n;i++) { memset(vis,false,sizeof(vis)); if(find(i)) ans++; } return ans;}int main(){ int i,j,n,m,u,v; while(scanf("%d%d",&n,&m)==2) { init(); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } memset(color,-1,sizeof(color)); bool flag; for(u=1;u<=n;u++) { if(color[u]==-1) { flag=judfs(u,0); if(!flag) break; } } if(u<=n) printf("No\n"); else printf("%d\n",hungary(n)>>1); } return 0;}

 

转载于:https://www.cnblogs.com/bitch1319453/p/4792983.html

你可能感兴趣的文章
配置nginx到后端服务器负载均衡
查看>>
从声学模型算法总结 2016 年语音识别的重大进步丨硬创公开课
查看>>
一个完整的微服务系统,应该包含哪些功能?--转
查看>>
简单快捷地测试 JPush API
查看>>
C语言 · 最长字符串
查看>>
jvm 性能调优 经验总结---转
查看>>
从spring容器中取出注入的bean
查看>>
show global status和show variables mysql 优化
查看>>
Java NIO6:选择器1——理论篇
查看>>
SQLServer数据库中开启CDC导致“事务日志空间被占满,原因为REPLICATION”的原因分析和解决办法...
查看>>
SQL Server 把当前日期中月份和几号中的0 去掉
查看>>
数据排序
查看>>
数据库事务
查看>>
STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy
查看>>
Android研究之监听自身应用被卸载代码实现
查看>>
新概念英语(1-21)Whick book
查看>>
Ubuntu下制作iso文件的简单方法
查看>>
【词云】代码
查看>>
undefined reference to `clock_gettime'
查看>>
easyUI中的layout
查看>>