P2055 [ZJOI2009]假期的宿舍

题目描述

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

输入输出格式

输入格式:

第一行一个数 T 表示数据组数。接下来 T 组数据,每组数据第一行一个数n 表示涉及到的总人数。接下来一行 n 个数,第 i 个数表示第 i 个人是否是在校学生 (0 表示不是,1 表示是)。再接下来一行 n 个数,第 i 个数表示第 i 个人是否回家 (0 表示不会家,1 表示回家,注意如果第 i 个人不是在校学生,那么这个位置上的数是一个随机的数,你应该在读入以后忽略它)。接下来 n 行每行 n 个数,第 i 行第 j 个数表示 i 和 j 是否认识 (1 表示认识,0 表示不认识,第 i 行 i 个的值为 0,但是显然自己还是可以睡自己的床),认识的关系是相互的。

输出格式:

对于每组数据,如果存在一个方案则输出 “ ˆ_ˆ ”(不含引号) 否则输出“T_T”(不含引号)。(注意输出的都是半角字符,即三个符号的 ASCII 码分别为94,84,95)

输入输出样例

输入样例#1:

1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
输出样例#1:

ˆ_ˆ

说明

对于 30% 的数据满足 1 ≤ n ≤ 12。

对于 100% 的数据满足 1 ≤ n ≤ 50,1 ≤ T ≤ 20。

多组数据!!!

/*
很容易想到是二分图匹配,匹配条件也蛮好想的,人和他能睡的床进行匹配,分两种情况
1.A是在校生,且A不回家,A与A连边
2.A,B有朋友关系,而且A是在校生,B与A连边
跑一便二分图,如果答案==要床的人数,就可以完成匹配
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 52
using namespace std;
int T,n,link[maxn],num,head[maxn*maxn];
struct node{
int to,pre;
}e[maxn*maxn];
bool a[maxn],b[maxn],vis[maxn];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
bool dfs(int x){
for(int i=head[x];i;i=e[i].pre){
int to=e[i].to;
if(!vis[to]){
vis[to]=;
if(!link[to]||dfs(link[to])){
link[to]=x;return ;
}
}
}
return ;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&T);
while(T--){
memset(link,,sizeof(link));
memset(vis,,sizeof(vis));
memset(head,,sizeof(head));
memset(e,,sizeof(e));num=;
int cnt=;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);//是否是在校学生
for(int i=;i<=n;i++){
scanf("%d",&b[i]);//是否回家
if(!b[i]&&a[i])Insert(i,i);//是在校学生并且不回家
if((a[i]&&!b[i])||!a[i])cnt++;
}
int x;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
scanf("%d",&x);
if(x==&&a[j])Insert(i,j);
}
}
int ans=;
for(int i=;i<=n;i++){
if((a[i]&&!b[i])||!a[i]){
memset(vis,,sizeof(vis));
if(dfs(i))ans++;
}
}
if(ans>=cnt)printf("^_^\n");
else printf("T_T\n");
}
}

洛谷P2055 [ZJOI2009]假期的宿舍的更多相关文章

  1. 洛谷——P2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...

  2. 洛谷 P2055 [ZJOI2009]假期的宿舍

    洛谷 P2055 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C ...

  3. 洛谷P2055 [ZJOI2009]假期的宿舍 题解

    题目链接: https://www.luogu.org/problemnew/show/P2055 分析: 这道题比较简单,二分图的练习题(当然最大流同理). 易得我们可以将人放在一侧,床放在一侧. ...

  4. 洛谷P2055 [ZJOI2009]假期的宿舍 [二分图最大匹配]

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  5. 洛谷$P2055\ [ZJOI2009]$ 假期的宿舍 最大流

    正解:最大流 解题报告: 传送门$QwQ$ 这种一看就很网络流鸭,直接说咋建图趴. 考虑把在校的人拆成人和床.$S$连向所有不回家的人,所有床连向$T$,认识的人之间人向床连边,跑个最大流就成. $o ...

  6. 洛谷 P2055 【假期的宿舍】

    题库 :洛谷 题号 :2055 题目 :假期的宿舍 link :https://www.luogu.org/problem/P2055 首先明确一下:校内的每个学生都有一张床(只是校内的有) 思路 : ...

  7. BZOJ1433或洛谷2055 [ZJOI2009]假期的宿舍

    BZOJ原题链接 洛谷原题链接 对于每个需要床位的人向他能睡的床连边,然后就是二分图最大匹配模板了. 这里用匈牙利算法. #include<cstdio> #include<cstr ...

  8. 洛谷2055 [ZJOI2009]假期的宿舍

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  9. 洛谷 2055 [ZJOI2009]假期的宿舍——二分图匹配

    题目:https://www.luogu.org/problemnew/show/P2055 #include<iostream> #include<cstdio> #incl ...

随机推荐

  1. 三 Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

  2. python3全方位教程

    http://www.runoob.com/python3/python3-tutorial.html http://www.runoob.com/

  3. kylin_学习_00_资源帖

    一.官方资料 1.官方文档 kylin官方文档(中文) 2.kylin的安装 Hadoop 环境搭建 kylin安装向导 二.参考资料 1.分布式大数据多维分析(OLAP)引擎Apache Kylin ...

  4. BLOB (binary large object)

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型的BL ...

  5. H264视频编码成MP4文件

    firehood的专栏 Wince嵌入式开发       目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版)      每周荐书:Kotlin.分布式.Keras ...

  6. 洛谷【P3407】散步

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  7. bzoj 1941 Hide and Seek —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941 曼哈顿最小距离估价:max( 0, t[x].mn[i] - v.p[i] ) + m ...

  8. android开发中 解决服务器端解析MySql数据时中文显示乱码的情况

    首先,还是确认自己MySql账户和密码 1.示例  账户:root   密码:123456   有三个字段   分别是_id  .username(插入有中文数据).password 1)首先我们知道 ...

  9. su - user解释

    su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] -c command:变更账号为USER的使用者,并执行 ...

  10. 升级MySQL 5.7版本遇到的一些小问题(转)

    在5.6版本服务器做备份 /usr/local/mysql/bin/mysqldump -S /tmp/mysql3306.sock -A -p --set-gtid-purged=OFF > ...