题面

解析

这其实就是个二分图匹配的水题(虽然我还是爆零了)

这题的意思就是说,有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】 假期的宿舍的更多相关文章

  1. P2055 [ZJOI2009]假期的宿舍 题解(二分图)

    题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...

  2. 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 ...

  3. [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 输出示例 ^_^ 数据 ...

  4. bzoj1433: [ZJOI2009]假期的宿舍(最大二分图匹配)

    1433: [ZJOI2009]假期的宿舍 题目:传送门 题解: 这题有点水 跑个二分图匹配就完事了(注意在校生不是一定都互相认识) 代码: #include<cstdio> #inclu ...

  5. BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2375  Solved: 1005[Submit][Sta ...

  6. 2055 [ZJOI2009]假期的宿舍

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

  7. bzoj1433: [ZJOI2009]假期的宿舍

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2286  Solved: 969[Submit][Stat ...

  8. bzoj1433:[ZJOI2009]假期的宿舍

    明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...

  9. bzoj1433 [ZJOI2009]假期的宿舍(最大流)

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1717  Solved: 754[Submit][Stat ...

  10. BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配

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

随机推荐

  1. selenium 鼠标,键盘操作

    1.打开和关闭网页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/env python # -*- coding:u ...

  2. 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...

  3. 代码优化:Java编码技巧之高效代码50例

    出处:  Java编码技巧之高效代码50例 1.常量&变量 1.1.直接赋值常量值,禁止声明新对象 直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值. 反例: Long i = ...

  4. 搞懂ZooKeeper到底是做啥的

    一.ZooKeeper是啥 ZooKeeper概念 ZooKeeper是一个开源的分布式协调服务(a service for coordinating processes of distributed ...

  5. CW2A与CA2W

    字符串的ASCII和UNICODE之间的转换 1)Win32提供了API函数MultiByteToWideChar和WideCharToMultiByte来提供这种功能. 2)ATL还提供了另一套转换 ...

  6. TreeSet——实现Comparable接口并重写CompareTo()方法

    TreeSet是以自然顺序存的数据,例如 Set<Student> students=new TreeSet(); students.add(new Student("111&q ...

  7. B2C电商平台开发心得(asp.net+bootstrap)

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 html.css.javascript的,专为 web 应用设计,包含了移动设备优先的样式, 其响应式 ...

  8. kali入侵服务器之后清除痕迹

    Linux清除痕迹 第一种方法: 在退出会话前直接执行: #history -r 清除当前会话的命令历史记录 第二种方法: 在vim中执行自己不想让别人看到的命令随便用vim打开一个文件 :set h ...

  9. js之运算符(关系运算符)

    关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或者是false.关系表达式总是返回一个布尔值. 具有如下8个关系运算符:大于(>),小于(<),小于等于(<=), ...

  10. 从无建立一个vue项目

    node.js安装 首先安装Node,官网地址 :https://nodejs.org/en/download/ ,进去下载关于符合自己电脑的下载. 具体的Node安装步骤参考地址: https:// ...