【题解】[ZJOI2009]假期的宿舍
\(\text{Solution:}\)
把人和床看成点,问题转化为二分图。
于是,对于每一个在校生,我们建立出他的床点;然后对于每一个在校生,他们自己可以和自己的床位连边。
对于其他人:每一个人都可以和他认识的人连边。当然,对于在校生不留下的人,可以省去连边。
于是,本题转化为网络流模型:源点向人连边,人向床连边,床向汇点连边,跑完最大流后判断其是不是等于所有需要床位的人的数量。等于则有解,不等则无解。
using namespace std;
const int MAXN=4000;
const int inf=2147483647;
int T,n,vis[1000],v[1000],S,TT;
int a[1000][1000],tot=1,head[MAXN];
struct edge{
int nxt,to,flow;
}e[MAXN];
inline void add(int x,int y,int w){
e[++tot].to=y;e[tot].nxt=head[x];
e[tot].flow=w;head[x]=tot;
e[++tot].to=x;e[tot].nxt=head[y];
e[tot].flow=0;head[y]=tot;
}
int dep[MAXN],cur[MAXN];
bool bfs(int s,int t){
memset(dep,0,sizeof(dep));
queue<int>q;q.push(s);
dep[s]=1;cur[s]=head[s];
while(!q.empty()){
s=q.front();q.pop();
for(int i=head[s];i;i=e[i].nxt){
int j=e[i].to;
if(!dep[j]&&e[i].flow){
dep[j]=dep[s]+1;
cur[j]=head[j];
if(j==t)return true;
q.push(j);
}
}
}
return false;
}
int dfs(int s,int flow,int t){
if(s==t||flow<=0)return flow;
int rest=flow;
for(int i=cur[s];i;i=e[i].nxt){
int j=e[i].to;
if(dep[j]==dep[s]+1&&e[i].flow){
int tmp=dfs(j,min(rest,e[i].flow),t);
if(tmp<=0)dep[j]=0;
rest-=tmp;e[i].flow-=tmp;e[i^1].flow+=tmp;
if(rest<=0)break;
}
}
return flow-rest;
}
int dinic(int s,int t){
int ans=0;
for(;bfs(s,t);)ans+=dfs(s,inf,t);
return ans;
}
void solve(){
tot=1;int sum=0;
for(int i=1;i<=n;++i){
if(vis[i]&&v[i])continue;
sum++;
}
for(int i=1;i<=n;++i){
if(v[i]&&vis[i])continue;
for(int j=1;j<=n;++j){
if(a[i][j]&&vis[j])add(i,j+n,1);
}
}
S=0,T=2*n+1;
for(int i=1;i<=n;++i)if(vis[i]&&!v[i])add(i,i+n,1);
for(int i=1;i<=n;++i){add(S,i,1);}
for(int i=1;i<=n;++i)if(vis[i])add(i+n,T,1);
int Sum=dinic(S,T);
if(Sum==sum)puts("^_^");
else puts("T_T");
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
a[i][j]=0;
for(int i=0;i<=n+n;++i)head[i]=dep[i]=cur[i]=vis[i]=v[i]=0;
for(int i=1;i<=tot;++i)e[i].flow=e[i].nxt=e[i].to=0;
}
int main(){
scanf("%d",&TT);
while(TT--){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&vis[i]);
for(int i=1;i<=n;++i)scanf("%d",&v[i]);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",&a[i][j]);
solve();
}
return 0;
}
【题解】[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要回 ...
随机推荐
- Android开发之Toast吐司的一个封装好的工具类。带有源代码java文件,
import android.content.Context; import android.widget.Toast; //Toast统一管理类 public class T { private T ...
- unity shader
Unity新的shader叫做 基于物理渲染的shader,先介绍下新的shader具有的特性: Energy Conservation(能量守恒):这是一个基于物理的概念,它确保物体反射的光线不会比 ...
- FZU - 2038 -E - Another Postman Problem (思维+递归+回溯)
Chinese Postman Problem is a very famous hard problem in graph theory. The problem is to find a shor ...
- 2019 HNCPC D Modulo Nine 数位DP
题意 给定长度n和m个限制(l,r),每一个限制的意义是\(a_l \times a_{l+1} \times ... a_r = 0 \quad mod\ 9\). 问有多少个满足所有条件且长度为n ...
- 在centos6.5下搭建lnmp
1.查看环境: [root@localhost /]# cat /etc/redhat-release CentOS release 6.5 (Final) 2.关掉防火墙(需要到国外地址下载软件 ...
- JQuery生成图片列表
<!DOCTYPE html> <html> <head> <title>生成图片列表</title> <style type=&qu ...
- IIS上传文件最大限制问题
IIS服务器文件最大限制默认是30M. 自定义方法:修改配置文件,路径是:C:\Windows\System32\inetsrv\Config\applicationHost.config 在requ ...
- SSM框架中添加写日志功能
前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...
- 阿里云短信服务验证码封装类 - PHP
本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用 使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的 composer requir ...
- python中使用cookie进行模拟登录
背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...