博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P2055 [ZJOI2009]假期的宿舍
阅读量:5214 次
发布时间:2019-06-14

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

这个建图真玄.jpg

简直是常识题

然而我常识不足QwQ

话说题解里的代码在我看来不美观所以抄不了题解 于是debug一个小时QwQ

给萌新一点活路吧

#include
#include
#include
using namespace std;int t,n,in[55],back[55],head[55],vis[55],match[55],cnt;vector
pp,bed;struct edge{ int v,next;}e[100005];inline void add(int u,int v){ e[++cnt].v=v; e[cnt].next=head[u]; head[u]=cnt;}inline bool dfs(int u){ for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(!vis[v]){ vis[v]=1; if(match[v]==-1||dfs(match[v])){ match[v]=u; return 1; } } } return 0;}int main(){ scanf("%d",&t); while(t--){ memset(head,-1,sizeof(head)); memset(match,-1,sizeof(match)); pp.clear();bed.clear(); scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&in[i]); for(int i=1;i<=n;i++){ scanf("%d",&back[i]); if(in[i])bed.push_back(i); if(!in[i]||!back[i])pp.push_back(i); } for(int i=1;i<=n;i++){ if(in[i]&&!back[i])add(i,i);//if要加 for(int j=1;j<=n;j++){ int x; scanf("%d",&x); if(x){ if(in[i]&&(!in[j]||!back[j]))add(i,j); if(in[j]&&(!in[i]||!back[i]))add(j,i); } } } int tot=0; for(int i=0;i<=bed.size()-1;i++){ memset(vis,0,sizeof(vis)); tot+=dfs(bed[i]); } if(tot==pp.size())printf("^_^\n"); else printf("T_T\n"); }}

转载于:https://www.cnblogs.com/Y15BeTa/p/11324413.html

你可能感兴趣的文章
2016.11.7
查看>>
SQLServer的数据存储结构01 文件与文件组
查看>>
vmware中虚拟化的问题
查看>>
源码mysql-5.7.23在cmake时出现的小问题
查看>>
Minion配置文件
查看>>
两个有序链表序列的合并 (15分)
查看>>
jupyter notebook提示需要token的问题
查看>>
Fragment之一:Fragment入门
查看>>
es6 import export 引入导出变量方式
查看>>
数组随机排序
查看>>
js简单上传进度条
查看>>
js传函数指针
查看>>
js时间戳与日期格式的相互转换
查看>>
JS创建对象的7中方式
查看>>
JS 之匿名函数
查看>>
使用js设置input标签只读 readonly 属性
查看>>
C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)...
查看>>
使用maven服务器插件 运行项目
查看>>
C#利用Vini.cs操作INI文件
查看>>
Bootstrap框架如何设置导入链接
查看>>