博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P2055 [ ZJOI 2009 ] 假期的宿舍 —— 二分图匹配
阅读量:5233 次
发布时间:2019-06-14

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

题目:

二分图匹配;

注意要连边的话对方必须有床!

代码如下:

#include
#include
#include
#include
using namespace std;int T,n,hd[55],ct,pre[55];bool in[55],hm[55],vis[55];struct N{ int to,nxt; N(int t=0,int n=0):to(t),nxt(n) {}}ed[2505];void add(int x,int y){ed[++ct]=N(y,hd[x]); hd[x]=ct;}bool dfs(int x){ for(int i=hd[x],u;i;i=ed[i].nxt) { if(vis[u=ed[i].to])continue; vis[u]=1; if(!pre[u]||dfs(pre[u])){pre[u]=x; return 1;} } return 0;}int main(){ scanf("%d",&T); while(T--) { ct=0; memset(hd,0,sizeof hd); memset(in,0,sizeof in); memset(hm,0,sizeof hm); memset(pre,0,sizeof pre); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&in[i]); if(in[i])add(i,i); } for(int i=1;i<=n;i++) { scanf("%d",&hm[i]); } for(int i=1,x;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&x); if(x&&in[j])add(i,j);//对方要有床!!! } bool fl=0; for(int i=1;i<=n;i++) { if(in[i]&&hm[i])continue; memset(vis,0,sizeof vis); if(!dfs(i)){fl=1; break;}//! } if(!fl)printf("%c%c%c\n",94,95,94); else printf("%c%c%c\n",84,95,84); } return 0;}

 

转载于:https://www.cnblogs.com/Zinn/p/9419716.html

你可能感兴趣的文章
千万不要误以为1个server只允许连接65535个Client。记住,TCP连出受端口限制,连入仅受内存限制...
查看>>
novalidate
查看>>
label for标签的作用
查看>>
uml多重性
查看>>
fastjson @JsonField
查看>>
jvm配置
查看>>
重载类型运算符
查看>>
EasyUI学习-如何使用jQuery EasyUI?
查看>>
前端JS之HTML利用XMLHttpRequest()和FormData()进行大文件分段上传
查看>>
jQuery获取Select选择的Text和 Value
查看>>
hdu1525 Euclid&#39;s Game , 基础博弈
查看>>
UVA 1262 Password 暴力枚举
查看>>
CakePHP不支持path/to路径,前后台无法方法
查看>>
「分享」jquery标签(关键字)插件
查看>>
RHEL7网卡命名规则
查看>>
ALV式的弹出窗口
查看>>
第六课 移动工具
查看>>
opensns学习
查看>>
第7次作业 选题报告和需求分析
查看>>
创建元素节点
查看>>