P2055 [ZJOI2009]假期的宿舍

学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识。我们假设每个人只能睡和自己直接认识的人的床。那么一个解决方案就是 B 睡 A 的床而 C 睡 B 的床。而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识。我们已知一共有 n 个人,并且知道其中每个人是不是本校学生,也知道每个本校学生是否回家。问是否存在一个方案使得所有不回家的本校学生和来看他们的其他人都有地方住。

显然的二分图匹配,这个图要分成两部分,一部分是人,另一部分是床

建图:1.如果这个人在校且不回家,那么就连$i$到$i$一条边,表示这个人于这个床匹配

2.如果这个人不在校且其朋友在校,就表明这个人可以睡在他朋友的床上,连接$i$到$j$

注意初始化

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define N 260
using namespace std; int head[N],tot;
struct nodE{
int to,next;
}e[N];
void add(int u,int v){
e[++tot].to=v,e[tot].next=head[u],head[u]=tot;
} int n,dfn[N],match[N],ans,sum;
int in[N],gh[N]; void init(){
memset(head,,sizeof(head));
memset(e,,sizeof(e));
memset(dfn,,sizeof(dfn));
memset(match,,sizeof(match));
tot=ans=sum=;
} bool dfs(int u,int t){
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(dfn[v]!=t){
dfn[v]=t;
if(!match[v]||dfs(match[v],t)){
match[v]=u;return true;
}
}
}
return false;
} int t;
int main()
{
scanf("%d",&t);
while(t--){
init();
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&in[i]);
for(int i=;i<=n;i++){
scanf("%d",&gh[i]);
if(!in[i]||(in[i]&&!gh[i])) ++sum;
if(in[i]&&!gh[i]) add(i,i);
}
for(int i=;i<=n;i++){
for(int x,j=;j<=n;j++){
scanf("%d",&x);
if(x&&in[j]) add(i,j);
}
}
for(int i=;i<=n;i++)
if((in[i]&&!gh[i])||!in[i]){
if(dfs(i,i)) ++ans;
} if(ans==sum) printf("^_^\n");
else printf("T_T\n");
} return ;
}

最新文章

  1. 在 Linux 下搭建 Git 服务器
  2. javascript 利用匿名函数对象给你异步回调方法传参数
  3. NOIp 2013 #3 转圈游戏 Label:模拟
  4. 浏览器中Javascript单线程分析
  5. Session赋值(备注)
  6. 我爆一个托 QQ305242038 电话 18782169971
  7. masm的一些常用编译选项
  8. 【Android】webview javascript 注入方法
  9. 如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索
  10. 翻译:非递归CTE(已提交到MariaDB官方手册)
  11. Vue.js常用指令:v-on
  12. Creating OpenGL 4.3 window fails with GLFW3
  13. 正则split
  14. hdu4336 Card Collector 【最值反演】
  15. git merge和git rebase的区别(转)
  16. vs2005+WinCE模拟器+ActiveSync调试WinCE程序
  17. 让字体在div容器中垂直居中
  18. wmware 10 升级到11后,macos不能运行的问题
  19. Kippo蜜罐的部署、诱捕节点的搭建以及自动告警
  20. 关于移动DSP

热门文章

  1. 【141】Adobe Acrobat技巧
  2. java中jsp页面的css资源定位---备忘录
  3. bzoj 3751: [NOIP2014]解方程【数学】
  4. bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】
  5. bzoj 1407: [Noi2002]Savage【扩展欧几里得+中国剩余定理】
  6. YCOJ中国邮递员问题
  7. jenkins一次构建两次触发job问题
  8. Python实现判断回文串
  9. 51Nod 1315 合法整数集
  10. git 标签