bzoj 1433: [ZJOI2009]假期的宿舍 -- 最大流
1433: [ZJOI2009]假期的宿舍
Time Limit: 10 Sec Memory Limit: 162 MB
Description

Input

Output

Sample Input
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
Sample Output
HINT
对于30% 的数据满足1 ≤ n ≤ 12。
对于100% 的数据满足1 ≤ n ≤ 50,1 ≤ T ≤ 20。
我们从源点向所有住宿的人连边,从所有的床位连向汇点,然后再从人连向他所认识的人的床位
这样建边,然后跑最大流
这样答案如果和住宿人数相等则满足,否则不满足
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 100007
#define F(i) for(i=1;i<=n;i++)
#define N 50010
#define M 110
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int lj[M],fro[N],to[N],cnt,v[N],S,T=;
inline void add(int a,int b,int c){fro[++cnt]=lj[a];to[cnt]=b;v[cnt]=c;lj[a]=cnt;}
inline void ins(int a,int b,int c){add(a,b,c);add(b,a,);}
int dis[M],q[N],h,t;
bool bfs()
{
memset(dis,,sizeof(dis));
dis[]=h=t=;q[]=;
int tp;
while(h<=t)
{
tp=q[h++];
for(int i=lj[tp];i;i=fro[i])
{
if(!dis[to[i]]&&v[i])
{
dis[to[i]]=dis[tp]+;
q[++t]=to[i];
}
}
}
return dis[T]?:;
}
int dfs(int x,int p)
{
if(x==T) return p;
int tp,res=;
for(int i=lj[x];i;i=fro[i])
{
if(v[i]&&dis[to[i]]==dis[x]+)
{
tp=dfs(to[i],min(p-res,v[i]));
v[i]-=tp;
v[i^]+=tp;
res+=tp;
if(res==p) return p;
}
}
if(res==) dis[x]=;
return res;
}
int n,tt,sc[M],tot,ans;
int main()
{
tt=rd();
int i,j,x;
while(tt--)
{
tot=ans=;
memset(lj,,sizeof(lj));cnt=;
n=rd();
F(i){
sc[i]=rd();
if(sc[i]) ins(i+n,T,);
}
F(i){
x=rd();
if((sc[i]&&!x)||!sc[i])
{
ins(,i,);
tot++;
}
}
F(i) F(j)
{
x=rd();
if(x||i==j) ins(i,j+n,);
}
while(bfs()) ans+=dfs(,inf);
if(tot==ans) puts("^_^");
else puts("T_T");
}
}
bzoj 1433: [ZJOI2009]假期的宿舍 -- 最大流的更多相关文章
- 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 ...
- BZOJ 1433 [ZJOI2009]假期的宿舍(网络流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1433 [题目大意] 在校学生有自己的床,外校的则没有,如果两个同学相互认识,则可以借用 ...
- bzoj 1433: [ZJOI2009]假期的宿舍【匈牙利算法】
i能睡j床的连边(i,j),跑最大匹配或者最大流,然后看看人数能不能对上总数即可 #include<iostream> #include<cstdio> #include< ...
- 洛谷 2055 BZOJ 1433 [ZJOI2009]假期的宿舍
[题解] 既然是一人对应一床,那么显然可以用二分图匹配来做.俩人认识的话,如果其中一个a是在校学生,另一个b不回家,b就可以向a的床连边(a,b当然也可以是同一个人). 然后如果最大匹配数大于等于需要 ...
- 1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 链接 分析: 直接网络流,看是否满足即可. S向每个有需要的人连边,有床的向T连边,认识的人之间互相连边. 代码: #include<cstdio&g ...
- bzoj1433 [ZJOI2009]假期的宿舍 最大流
[ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3429 Solved: 1459[Submit][Status][D ...
- 洛谷$P2055\ [ZJOI2009]$ 假期的宿舍 最大流
正解:最大流 解题报告: 传送门$QwQ$ 这种一看就很网络流鸭,直接说咋建图趴. 考虑把在校的人拆成人和床.$S$连向所有不回家的人,所有床连向$T$,认识的人之间人向床连边,跑个最大流就成. $o ...
- 1433. [ZJOI2009]假期的宿舍【二分图】
Description 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能 ...
- bzoj1433 [ZJOI2009]假期的宿舍(最大流)
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1717 Solved: 754[Submit][Stat ...
随机推荐
- 一款基于react-native的弹窗提示组件
介绍一款基于react-native的弹窗提示插件 react-native-ms , github地址:https://github.com/jiangzhenfei/react-native-ms ...
- 删除none的images
脚本 #!/bin/bash docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop docker p ...
- adb_usb.ini在adb找不到设备时
不能连接不上adb,如下方法解决,步骤描述不愿意看的话,直接使用本文最下面的批处理命令,方法copy粘贴到新建的bat文件里运行,或者直接粘贴到dos窗口运行. 1. 使用androidsdk目录中的 ...
- 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞
SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...
- photoshop 安装问题
问题:“安装程序检测到计算机重新启动操作可能处于挂起状态.建议您退出安装程序,重新启动并重试.” 解决: 1.运行 regedit 打开注册表编辑器. 2.依次展开HKEY_LOCAL_MACHINE ...
- 使用angluar-cli的ng g component home指令出现的错误
Error: ELOOP: too many symbolic links encountered, stat '/Users/zzy/angular/taskmgr/node_modules/@an ...
- rds 与mysql 进行主从同步
.rds上默认会有server-****,只需要配置从数据库: .从数据库的配置流程: .[mysqld] log-bin = mysql-bin-changelog #要和主库中的名字一样 rela ...
- bash: composer: command not found
下载composer到本地:curl -sS https://getcomposer.org/installer | php 移动至系统服务:sudo mv composer.phar /usr/bi ...
- cin关闭同步[转]
很多人会说cin的速度比scanf慢很多, 其实不然. cin慢的原因主要在于默认cin与stdin总是保持同步, 这一步是消耗时间大户. 只需要加上ios::sync_with_stdio(fals ...
- 线性SVM的推导
线性SVM算法的一般过程 线性SVM的推导 超平面方程 SVM是用来分类的.给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的.比如,二维数据的超平面是 ...