【二分图】洛谷P2055假期的宿舍
题目描述
学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 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 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0
ˆ_ˆ
说明
对于 30% 的数据满足 1 ≤ n ≤ 12。
对于 100% 的数据满足 1 ≤ n ≤ 50,1 ≤ T ≤ 20。
多组数据!!!
题解
对于每一个在校的人,与他可以睡的床连边,这里床和人都记为点,匹配的时候统一匹配
比如第i个人的床就是第i+n号,不是学生也有床,只不过不连边。
注意在校的有床的学生要和自己的床连边!不然WA到飞起!
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int MAXN = 510; int uN,vN; int g[MAXN][MAXN]; int linker[MAXN],pipei; bool used[MAXN],stu[MAXN],hom[MAXN];bool dfs(int u) {for(int v = 1; v <=vN;v++)if(stu[v]&&g[u][v]&&!used[v]){used[v] = true;if(linker[v]==-1||dfs(linker[v])){linker[v]=u;return true;}}return false; }bool hungary() {int res = 0;memset(linker,-1,sizeof(linker));for(int u = 1;u <= uN;u++){memset(used,false,sizeof(used));if((!stu[u]||!hom[u])&&!dfs(u)) return 0; }return 1; }int main() {int t,n;scanf("%d",&t);while(t--){scanf("%d",&n);uN=vN=n;memset(g,0,sizeof(g));for(int i=1;i<=n;i++)scanf("%d",&stu[i]);for(int i=1;i<=n;i++){scanf("%d",&hom[i]);if(!stu[i])hom[i]=1;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)scanf("%d",&g[i][j]);if(stu[i])g[i][i]=1;}printf("%s\n",hungary()?"^_^":"T_T");}return 0; }
转载于:https://www.cnblogs.com/rir1715/p/6843421.html
【二分图】洛谷P2055假期的宿舍相关推荐
- 二分图 洛谷P2055 [ZJOI2009]假期的宿舍
[ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...
- 二分图——洛谷P1155 双栈排序
https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...
- 洛谷P2055 [ZJOI2009]假期的宿舍 题解
题目链接: https://www.luogu.org/problemnew/show/P2055 分析: 这道题比较简单,二分图的练习题(当然最大流同理). 易得我们可以将人放在一侧,床放在一侧. ...
- 二分图——洛谷P3386 【模板】二分图匹
https://www.luogu.org/problem/show?pid=3386 匈牙利算法不断寻找增广路: 尽可能让当前枚举的i可以匹配: 时间复杂度自己看代码: #include<cs ...
- 洛谷2055 [ZJOI2009]假期的宿舍
题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2375 Solved: 1005 [Submit][S ...
- 洛谷:P1129 [ZJOI2007] 矩阵游戏(二分图最大匹配)
洛谷:矩阵游戏 洛谷题解就挺好 目的是使得最终(1,1)(2,2)-(n,n)都有一个点 可以看作为,最终状态需要每 i 行和 i 列都存在一个匹配 建图方式:对于 i 行 j 列的1点,建一条 i ...
- (二分图)洛谷P2071座位安排
洛谷P2071座位安排 思路: 网络流难在建图上面. 这题(应该也可以,我没尝试过)用二分图匹配去跑.可以拆点,将一排的座位拆成两个点,一个iii,一个i+ni+ni+n,然后匈牙利算法跑. 也可以用 ...
- 洛谷P3386:网络流之二分图匹配,最大流算法
二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...
最新文章
- 独家 | 微软与哈佛大学定量社会科学研究所合作开发开放数据差异隐私平台,开启研究新征程(附链接)...
- xcode6不显示键盘------解决方案
- 学习笔记(30):Python网络编程并发编程-Event事件
- Linux实验三:Shell编程
- 特斯拉第四季度生产超30.5万台车 全年交付近百万台
- 布线规划要点-开始设计前必须考虑的几个问题
- [转载] python程序所需的图片通过base64编码成字符串放在代码中
- 关于哈希,分布式哈希表,一致性哈希
- 用Java实现向Cassandra数据库中插入和查询数据
- javase转javaee(java web)
- WIN7专业版32/64位更换系统语言注意
- mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具
- 考研高数 专题11:多元复合函数及隐函数求导的方法和技巧【灵活】
- 采购(标准采购、标准收货) 库存(杂收、杂发) U9操作
- kafka-4.进阶,ISR,OSR,AR,LW,HW,LEO,ACK原理理论
- win10系统盘多大合适_yi点分享 | Win10下安装Ubuntu20.04,看这一篇就够了
- 荐:Java常见设计模式
- WordPress+BuddyPress注册页面404问题的解决
- rockbox主题包安装_WaveCN.com - 站长手记 - 站长手记 - Rockbox Utility介绍及Rockbox快速安装简介...
- 微信能上网,而浏览器不能上网
热门文章
- ubuntu虚拟机进程被杀死_vmware虚拟机奔溃,如何抢救文件
- quickserver java_QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列) - java - CSDN技术中心...
- Spark Streaming三种运行场景
- Linux 基本命令不能用的解决方法
- Struts2 文件上传 文件类型 大小过滤
- 【跃迁之路】【456天】程序员高效学习方法论探索系列(实验阶段213-2018.05.07)...
- [windows+cocos2dx]CCSprite精灵类
- windows7网购火车票全解析
- (译)如何使用cocos2d来制作简单的iphone游戏:更猛的怪物和更多的关卡。(第三部分。完!)...
- 移动开发 Jetpack Compose 组件布局