题解 【ZJOI2009】 假期的宿舍
题面
解析
这其实就是个二分图匹配的水题(虽然我还是爆零了)
这题的意思就是说,有x个人,y张床(x,y不确定),
每个人只能睡在指定的几张床上,
问能否使每人都有床睡。
所以,直接二分图匹配,看最大匹配是否大于行了啊啊!(当然,用网络流也可以。)
然而,却出现了一些玄学错误(导致本次考试全体爆零)。
所以,我来总结一下:
- 多组数据要记得清零!
- 注意如果第 i 个人不是在校学生,那么这个位置上的数是一个随机的数,应该在读入以后忽略它
- 连边的时候要住意有些校外的人没床。
然后就能AC了!
上AC代码(虽然感觉没什么用):
#include<bits/stdc++.h>
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} struct node{
int next,to;
}e[];
int T;
int n,s[]/*是否在校*/,a[]/*是否回家*/;
int m,head[],cnt=;
int f[][];
int linker[],vis[]; void add(int x,int y){
e[++cnt].to=head[x];
e[cnt].next=y;
head[x]=cnt;
} bool dfs(int x){
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(vis[k]) continue;
vis[k]=;
if(linker[k]==-||dfs(linker[k])){
linker[k]=x;
return ;
}
}
return ;
} bool hungarian(int m){
memset(linker,-,sizeof(linker));
int sum=;
for(int i=;i<=n;i++){
if(!a[i]){
memset(vis,,sizeof(vis));
if(dfs(i)) sum++;
}
}
if(sum>=m) return ;
return ;
} int main(){
// freopen("dormitory.in","r",stdin);
// freopen("dormitory.out","w",stdout);
T=read();
while(T--){
memset(head,,sizeof(head));
memset(e,,sizeof(e));
memset(f,,sizeof(f));
memset(a,,sizeof(a));
cnt=;
n=read();m=n;
for(int i=;i<=n;i++)
s[i]=read();
for(int i=;i<=n;i++){
int x=read();
if(s[i]) a[i]=x;
}
for(int i=;i<=n;i++) m-=a[i];
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
f[i][j]=read();
}
f[i][i]=;
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(f[i][j]&&s[j]) add(i,j+n);
}
}
if(hungarian(m)) printf("%c%c%c\n",,,);
else printf("T_T\n");
}
return ;
}
题解 【ZJOI2009】 假期的宿舍的更多相关文章
- P2055 [ZJOI2009]假期的宿舍 题解(二分图)
题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...
- bzoj 1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 Sample ...
- [BZOJ1433][luogu_P2055][ZJOI2009]假期的宿舍
[BZOJ1433][luogu_P2055][ZJOI2009]假期的宿舍 试题描述 输入 输出 输入示例 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 输出示例 ^_^ 数据 ...
- bzoj1433: [ZJOI2009]假期的宿舍(最大二分图匹配)
1433: [ZJOI2009]假期的宿舍 题目:传送门 题解: 这题有点水 跑个二分图匹配就完事了(注意在校生不是一定都互相认识) 代码: #include<cstdio> #inclu ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Sta ...
- 2055 [ZJOI2009]假期的宿舍
P2055 [ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A ...
- bzoj1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2286 Solved: 969[Submit][Stat ...
- bzoj1433:[ZJOI2009]假期的宿舍
明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...
- bzoj1433 [ZJOI2009]假期的宿舍(最大流)
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1717 Solved: 754[Submit][Stat ...
- BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配
BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...
随机推荐
- Redis(1.9)Redis主从复制
[1]实验环境 CentOS7.5 + Redis4.0.11 架构:原生1主2从,做实验机器有限,从库双实例 主库:192.168.135.170 从库1:192.168.135.171~6379 ...
- 查找担保圈-step7-提取未被包含过组的成员,得出结论
USE [test] GO /****** Object: StoredProcedure [dbo].[p05_get_group_member_cleared] Script Date: 2019 ...
- 内网和wifi同时存在
1.注意都要用管理员身份运行 2.将以下代码编写为.bat文件,然后以管理员身份运行此文件 route delete 0.0.0.0 route delete 10.10.0.0 route dele ...
- 安装echo框架
视频地址: https://www.bilibili.com/video/av63492462?p=31 echo文档地址: https://echo.labstack.com/guide/insta ...
- 初遇PHP(一)
因为想给自己弄一个微信公众号,顺便提升一下自己,所以有了以下内容,本次学习的最终目标是能用php制作套微信公众号,然后转成Java.为什么要这么麻烦呢,其一是买的资料书是php的,其二是顺水推舟刚好可 ...
- 老贾的幸福生活day3 之markdown常用语法简要
1.markdown常用语法 标题 一级到六级 用#+空格实现 2.代码块 3个 `实现 python is a ...... 单行代码,用"``" 3.列表 有序列表 跟内容 数 ...
- 牛客 40F 珂朵莉的约数 (莫队)
珂朵莉给你一个长为n的序列,有m次查询 每次查询给两个数l,r 设s为区间[l,r]内所有数的乘积 求s的约数个数mod 1000000007 直接莫队暴力维护复杂度是$O(8m\sqrt{m})$. ...
- C#面向对象15 多态
多态 概念:让一个对象能够表现出多种的状态(类型) 实现多态的3种手段:1.虚方法 2.抽象类 3.接口 1.虚方法 步骤:1.将父类的方法标记为虚方法,使用关键字 virtual,这个函数可以被子类 ...
- SpringBoot整合MyBatis的分页插件PageHelper
1.导入依赖(maven) <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...
- git 查看当前仓库地址以及设置新的仓库地址
1.查看当前仓库地址 git remote show origin 2.设置新的仓库地址 1.先登录 gitlab 查看当前仓库地址: 执行修改地址命令 git remote set-url orig ...