博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1433: [ZJOI2009]假期的宿舍【二分图匹配】
阅读量:4500 次
发布时间:2019-06-08

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

1433: [ZJOI2009]假期的宿舍

Time Limit: 10 Sec Memory Limit: 162 MB

Description

学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如A

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

Input

第一行一个数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,但是显然自己还是可以睡自己的床),
认识的关系是相互的。
1 ≤ n ≤ 50,1 ≤ T ≤ 20

Output

对于每组数据,如果存在一个方案则输出“^_^”(不含引号)否则输出“T_T”(不含引号)。

(注意输出的都是半角字符,即三个符号的ASCII码分别为94,84,95)

Sample Input

1

3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0

Sample Output

ˆ_ˆ

题解

裸的二分图匹配

代码如下

#include
#include
#include
using namespace std;int n,T,ans,num;int vis[2*55],sty[2*55],mp[2*55][2*55],grl[2*55],usd[2*55];bool fnd(int x){ for(int i=1;i<=n;i++) if(!usd[i]&&mp[x][i]){ usd[i]=1; if(!grl[i]||fnd(grl[i])){grl[i]=x;return 1;} } return 0;}int main(){ scanf("%d",&T); while(T--){ scanf("%d",&n);ans=0,num=0; memset(mp,0,sizeof(mp)); memset(grl,0,sizeof(grl)); for(int i=1;i<=n;i++) scanf("%d",&vis[i]); for(int i=1;i<=n;i++){
scanf("%d",&sty[i]);if(!vis[i]||(vis[i]&&!sty[i])) num++;} for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ bool x; scanf("%d",&x); if(x&&((vis[i]&&!sty[i])||!vis[i])&&vis[j]) mp[i][j]=1; } if(vis[i]&&!sty[i]) mp[i][i]=1; } for(int i=1;i<=n;i++) memset(usd,0,sizeof(usd)),ans+=fnd(i); if(ans==num) printf("^_^\n");else printf("T_T\n"); } return 0;}

转载于:https://www.cnblogs.com/XSamsara/p/9059430.html

你可能感兴趣的文章
vue-cli的项目中关于axios的全局配置
查看>>
动软.Net代码生成器
查看>>
Redis使用
查看>>
json数组
查看>>
【转】nginx 499错误的原因及解决办法
查看>>
用C语言实现最小二乘法算法
查看>>
js学习笔记一
查看>>
[cocos2d]场景切换以及切换进度显示
查看>>
fenby C语言 P6
查看>>
【leetcode 简单】 第一百一十题 分发饼干
查看>>
解决python写入csv文件每两行间 隔一个空行的问题
查看>>
JMeter学习-019-JMeter 监听器之【聚合报告】界面字段解析及计算方法概要说明(转载)...
查看>>
C++ 通过对象方式 、指针方式两种方式去访问成员变量(属性或者方法)
查看>>
HDU 5656 CA Loves GCD 01背包+gcd
查看>>
关于Servlet周期问题
查看>>
diff文件制作
查看>>
js正则表达式验证身份证号和密码
查看>>
Windows下MySQL的my.ini文件字符集测试(二)
查看>>
Linux 命令大全
查看>>
[Database] Oracle 中的where 可以后接group by
查看>>