BZOJ-1433 假期的宿舍 最大流+基础建图
网络流练习ing。。
1433: [ZJOI2009]假期的宿舍
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1748 Solved: 765
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
**Sample Outpu**t
ˆ-ˆ
HINT
对于30% 的数据满足1 ≤ n ≤ 12。
对于100% 的数据满足1 ≤ n ≤ 50,1 ≤ T ≤ 20。
基础建图:
超级源连向所有在校生(有床位的人);所有在校生且不回家的,与所有非在校生的与超级源相连;每个点分成两个i与i',如果i和j认识连i与j';边权全部为1
最大流即为答案。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 1000010
struct data{
int to,next,v;
}edge[M];
int head[M],cnt=1;
int dis[M];
int q[M],h,t;
int c,n,ans,num;
int zx[60],know[60][60],hj[60];
//zx【】是否在校,know【】【】是否认识,hj【】是否回家
void add(int u,int v,int w)
{
cnt++;
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt;
edge[cnt].v=w;
}
void make()//超级源为0,超级汇为2*n+1
{
cnt=1; memset(head,0,sizeof(head));
num=0;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
if (know[i][j]==1)
{
add(i,j+n,1);
add(j+n,i,0);
}
for (int i=1; i<=n; i++)
{
if (zx[i]==1)
{
add(0,i,1);
add(i,0,0);
}
if ((zx[i]==1 && hj[i]==0) || (zx[i]==0))
{
add(i+n,2*n+1,1);
add(2*n+1,i+n,0);
num++;//需要床位数
}
}
}
bool bfs()
{
memset(dis,-1,sizeof(dis));
q[1]=0; dis[0]=1;
h=0; t=1;
while (h<t)
{
int j=q[++h],i=head[j];
while (i)
{
if (edge[i].v>0 && dis[edge[i].to]<0)
{
dis[edge[i].to]=dis[j]+1;
q[++t]=edge[i].to;
}
i=edge[i].next;
}
}
if (dis[2*n+1]>0)
return true;
else
return false;
}
int dfs(int loc,int low)
{
int flow=0;
if (loc==2*n+1) return low;
int i=head[loc];
while (i)
{
if (edge[i].v>0 && dis[edge[i].to]==dis[loc]+1 && (flow=dfs(edge[i].to,min(low,edge[i].v))))
{
edge[i].v-=flow;
edge[i^1].v+=flow;
return flow;
}
i=edge[i].next;
}
return 0;
}
int main()
{
scanf("%d",&c);
while (c--)
{
scanf("%d",&n);
memset(zx,0,sizeof(zx));
memset(hj,0,sizeof(hj));
memset(know,0,sizeof(know));
for (int i=1; i<=n; i++)
scanf("%d",&zx[i]);
for (int i=1; i<=n; i++)
scanf("%d",&hj[i]);
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
scanf("%d",&know[i][j]);
for (int i=1; i<=n; i++)
know[i][i]=1;//由题意自己和自己在读入时为不能睡,但实际可以,修改。
make();
ans=0;
while (bfs())
{
int now=0;
while ((now=dfs(0,0x7fffffff)))
ans+=now;
}
if (num==ans)
puts("^_^");
else
puts("T_T");
}
return 0;
}
BZOJ-1433 假期的宿舍 最大流+基础建图的更多相关文章
- poj--1149--PIGS(最大流经典建图)
PIGS Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- bzoj 1433: [ZJOI2009]假期的宿舍 -- 最大流
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MB Description Input Output Sample Input ...
- bzoj1433 [ZJOI2009]假期的宿舍 最大流
[ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3429 Solved: 1459[Submit][Status][D ...
- 洛谷$P2055\ [ZJOI2009]$ 假期的宿舍 最大流
正解:最大流 解题报告: 传送门$QwQ$ 这种一看就很网络流鸭,直接说咋建图趴. 考虑把在校的人拆成人和床.$S$连向所有不回家的人,所有床连向$T$,认识的人之间人向床连边,跑个最大流就成. $o ...
- 【BZOJ-2879】美食节 最小费用最大流 + 动态建图
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1366 Solved: 737[Submit][Status] ...
- POJ2195费用流+BFS建图
题意: 给你一个n*m的地图,上面有w个人,和w个房子,每个人都要进房子,每个房子只能进一个人,问所有人都进房子的路径总和最少是多少? 思路: 比较简单的最大流,直接建立两排, ...
- POJ1149 最大流经典建图PIG
题意: 有一个人,他有m个猪圈,每个猪圈里都有一定数量的猪,但是他没有钥匙,然后依次来了n个顾客,每个顾客都有一些钥匙,还有他要卖猪的数量,每个顾客来的时候主人用顾客的钥匙打开相应的门,可 ...
- 洛谷 - P2055 - 假期的宿舍 - 最大流
https://www.luogu.org/problemnew/show/P2055 这是一个错误的示范. 一开始觉得就找一条路从外校同学连到本校同学然后最终从周末回家的同学流出,每个人睡后一个人的 ...
- BZOJ 2095 [Poi2010]Bridges (二分+最大流判断混合图的欧拉回路)
题面 nnn个点,mmm条双向边(正向与反向权值不同),求经过最大边权最小的欧拉回路的权值 分析 见 commonc大佬博客 精髓就是通过最大流调整无向边的方向使得所有点的入度等于出度 CODE #i ...
随机推荐
- c#中结构体(struct)和类(class)的区别
一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...
- iOS单例模式(Singleton)写法简析
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
- 004医疗项目-逆向工程-pojo类的创建和对应xml的生成
我们使用mybatis的逆向工程来生成pojo类,省去很多不必要的工作. 我把逆向工程需要的项目如下:
- 24Spring_事务管理机制
第一部分:Spring事务管理高层抽象接口 我们介绍三个接口:1.PlatformTransactionManager 2.TransactionDefinition 3.TransactionSt ...
- WPF:如何为程序添加splashScreen(初始屏幕)
原文:http://www.cnblogs.com/chenxizhang/archive/2010/03/25/1694606.html 官网: https://msdn.microsoft.com ...
- Android 编程下 Touch 事件的分发和消费机制
Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...
- Spring系列: 使用aop报错:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle
写了个最简单的aop例子 配置文件如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...
- 《JavaScript高级程序设计》chapter 1: javascript 简介
1.2.2 文档对象模型 DHTML的出现让开发人员无需重新加载页面就可以修改其外观了. 1.2.3 浏览器对象模型(BOM) BOM真正与众不同的地方在于他作为javascript实 ...
- http状态码代表含义
状态代码 状态信息 含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转 ...
- java加解密操作过程中的中文乱码问题
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import ...