洛谷 P2055 【假期的宿舍】
- 题库 :洛谷
- 题号 :2055
- 题目 :假期的宿舍
- link :https://www.luogu.org/problem/P2055
首先明确一下:校内的每个学生都有一张床(只是校内的有)
思路 :分析题目发现是求所有在校学生能否全部有床睡(注意:只需在校学生有床睡,及不回家的;这个床可以是自己的,也可以是朋友的);于是,这道题我们可以把它想象成一个二分图,如样例图:

a -> b表示a可以睡b的床(注意:虽然样例中没有2 -> 2的边,但你仔细读题就会发现题目中的原话---
)
由于题目里给的是一个邻接矩阵,我们便可以无视蓝点所连出去的边,只用红点去搜就行了(代码里写了也不要紧)
代码 :
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int T, n, head[], num, vis[], choose[], q[], w[], ans, cnt;
struct node
{
int next, to;
}stu[];
inline void add(int x, int y)//链式前向星
{
stu[++num].next = head[x];
stu[num].to = y;
head[x] = num;
return;
}
inline int dfs(int u)//二分图匈牙利算法模板
{
for(register int i = head[u]; i; i = stu[i].next)
{
int k = stu[i].to;
if(vis[k])
{
continue;
}
vis[k] = ;
if(!choose[k] || dfs(choose[k]))
{
choose[k] = u;
return ;
}
}
return ;
}
signed main()
{
scanf("%d", &T);
while(T--)//多组数据
{
memset(choose, , sizeof(choose));//初始化
memset(head, , sizeof(head));
num = ;
ans = ;
cnt = ;
scanf("%d", &n);
for(register int i = ; i <= n; ++i)
{
scanf("%d", &q[i]);
}
for(register int i = ; i <= n; ++i)
{
scanf("%d", &w[i]);
if(q[i] && !w[i])//如果他是本校学生&&他不回家
{
add(i, i);//自己可以睡自己的床
}
}
for(register int i = ; i <= n; ++i)
{
for(register int j = , x; j <= n; ++j)
{
scanf("%d", &x);
if(x)
{
if(q[i])//如果i是本校学生(及有一张床)
{
add(j, i);//j也可以睡
}
if(q[j])//同理
{
add(i, j);
}
}
}
}
for(register int i = ; i <= n; ++i)
{
if(q[i] && w[i])//如果是本校学生&&不留在学校(如果是外校的就不可能回家啊)
{
++cnt;//记录一下有多少个,以后算答案方便
continue;//不用管他有没有床
}
memset(vis, , sizeof(vis));
if(!dfs(i))//如果有一个学生没有床
{
printf("T_T\n");//哭了
break;
}
else
{
++ans;//记录有床的学生数量
}
}
if(ans == n - cnt)//如果留学校的人都有床
{
printf("^_^\n");//笑了
}
}
return ;
}
洛谷 P2055 【假期的宿舍】的更多相关文章
- 洛谷 - P2055 - 假期的宿舍 - 最大流
https://www.luogu.org/problemnew/show/P2055 这是一个错误的示范. 一开始觉得就找一条路从外校同学连到本校同学然后最终从周末回家的同学流出,每个人睡后一个人的 ...
- 【二分图】洛谷P2055假期的宿舍
题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...
- 洛谷P2055假期的宿舍
题目 此题主要是考察二分图匹配,而二分图匹配最主要的就是建图,而图一般都是要分成两个部分来分,比如该题就需要先将在学校住的人和床连在一起,因为在学校住就会与一个床.然后每两个人之间假如他们相互认识就可 ...
- 洛谷 p2055 假期的宿舍 题解
好长时间没更博客了 因为实在太蒻了 这让本蒟蒻怎么办 今天终于遇到了一道模板题(之前也有,不过太蒻了都不会) 不过...写代码5分钟,调试2小时 分界线:回归正题 这个就是普通的匈牙利算法 差不多 思 ...
- 洛谷P2756飞行员配对方案问题 P2055假期的宿舍【二分图匹配】题解+代码
洛谷 P2756飞行员配对方案问题 P2055假期的宿舍[二分图匹配] 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架 ...
- 洛谷 P2055 [ZJOI2009]假期的宿舍
洛谷 P2055 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C ...
- 洛谷P2055 [ZJOI2009]假期的宿舍
P2055 [ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A ...
- 洛谷——P2055 [ZJOI2009]假期的宿舍
P2055 [ZJOI2009]假期的宿舍 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...
- 洛谷 P2055 [ ZJOI 2009 ] 假期的宿舍 —— 二分图匹配
题目:https://www.luogu.org/problemnew/show/P2055 二分图匹配: 注意要连边的话对方必须有床! 代码如下: #include<iostream> ...
随机推荐
- bitset的简单用法
1.头文件 #include<bitset> 2.基本操作 bitset<n> b; b有n位,每位都为0. 参数n可以为一个表达式.如bitset<5> b, 则 ...
- web设计_7_页面缺失图片或CSS的情况下仍然易读
1. 在任何可能使用背景图片的地方应设置同样的颜色的背景色. 防止图片不能加载的情况下,页面内容同样保持较好可读性. 例如文字为白色,背景图为深色,如果不设置背景色,当背景图未成功加载, 而浏览器多数 ...
- VM虚拟机Linux系统eth0下面没有inet和inet6
今天打开虚拟机发现ip有问题,VM虚拟机Linux系统eth0下面没有inet和inet6,明明都是配置好的 打开任务管理器-> 服务-> 打开VM的nat和DHCP和hostd 正常后:
- Linux系统命令。
help:命令用于显示shell内部命令的帮助信息.help命令只能显示shell内部的命令 帮助信息.而对于外部命令的帮助信息只能使用man或者info命令查看 m ...
- 入门MySQL——基础语句篇
前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及 ...
- MemCached的telnet命令行参数
1.启动Memcache 常用参数 -p <num> 设置TCP端口号(默认不设置为: 11211) -U <num> UDP监听端口(默认: 11211, ...
- spring实战学习笔记(一)spring装配bean
最近在学习spring boot 发现对某些注解不是很深入的了解.看技术书给出的实例 会很疑惑为什么要用这个注解? 这个注解的作用?有其他相同作用的注解吗?这个注解的运行机制是什么?等等 spring ...
- .net core 基于 IHostedService 实现定时任务
.net core 基于 IHostedService 实现定时任务 Intro 从 .net core 2.0 开始,开始引入 IHostedService,可以通过 IHostedService ...
- ipv6的连接
基础知识不说了,网上一大堆! 基本内容不说了,写字太累了! 只说三点细节,记住就行: 1.ff开头的是多播地址,只能用于udp多播 2.fe80开头的是本地link地址,不管ping也好,connec ...
- 单元测试python unittest
记录自己学习单元测试框架的一篇博客 菜鸟的学习之路比较艰辛到处找资料一把辛酸泪啊 1.首先是创建一个类里面设计一些简单的函数方便写用例: 原谅我蹩脚的英文直接用拼音命名了 : 2.接着就是创建用例文件 ...