[BZOJ2502]清理雪道 有上下界网络流(最小流)
2502: 清理雪道
Time Limit: 10 Sec Memory Limit: 128 MB
Description
Input
Output
Sample Input
1 3
1 7
2 4 5
1 8
1 8
0
2 6 5
0
Sample Output
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=,inf=0x7fffffff;
struct edge{int zhong,next,flow;};
struct NetWork
{
int n,S,T,e,adj[N],cur[N];
int hd,tl,que[N],dist[N],gap[N];
edge s[N<<];
inline void intn(int sz)
{
n=sz,e=,memset(adj,,sizeof(adj));
memset(dist,,sizeof(dist));
memset(gap,,sizeof(gap));
}
inline void add(int qi,int zhong,int flow)
{s[++e].zhong=zhong;s[e].next=adj[qi];adj[qi]=e;s[e].flow=flow;}
inline void bfs()
{
hd=,tl=,dist[T]=,que[++tl]=T;
register int i,x,u;
while(hd<=tl)
for(x=que[hd++],++gap[dist[x]],i=adj[x];i;i=s[i].next)
if(!dist[s[i].zhong])
dist[s[i].zhong]=dist[x]+,que[++tl]=s[i].zhong;
}
int Shoot(int rt,int maxf)
{
if(rt==T||!maxf)return maxf;
register int i,f,ret=;
for(i=cur[rt];i;i=s[i].next)
if(s[i].flow&&dist[rt]==dist[s[i].zhong]+)
{
f=Shoot(s[i].zhong,min(s[i].flow,maxf)),
maxf-=f,ret+=f,s[i].flow-=f,s[i^].flow+=f;
if(!maxf)return ret;
}
if(!(--gap[dist[rt]]))dist[S]=n+;
++gap[++dist[rt]],cur[rt]=adj[rt];
return ret;
}
inline int ISAP(int a,int b)
{
S=a,T=b;int maxf=;bfs();
memcpy(cur,adj,sizeof(adj));
while(dist[S]<=n)maxf+=Shoot(S,inf);
return maxf;
}
inline void cut_off(int x)
{
register int i;
for(i=adj[x];i;i=s[i].next)
s[i].flow=s[i^].flow=;
}
inline void get_ans(int a,int b,int ss,int tt)
{
add(b,a,inf),add(a,b,),ISAP(ss,tt);
int ans=s[e].flow;
s[e].flow=s[e^].flow=;
cut_off(ss),cut_off(tt);
printf("%d\n",ans-ISAP(b,a));
}
}SAP;
int n,m,S,T,SS,TT;
int rudu[N],chudu[N],du[N];
int main()
{
scanf("%d",&n),S=,T=n+,SS=T+,TT=SS+;
SAP.intn(TT+);
register int a,b,i,j;
for(i=;i<=n;++i)
for(scanf("%d",&a),j=;j<=a;++j)
scanf("%d",&b),++du[b],--du[i],
++chudu[i],++rudu[b],
SAP.add(i,b,inf),SAP.add(b,i,);
for(i=;i<=n;++i)
{
if(!rudu[i])SAP.add(S,i,inf),SAP.add(i,S,);
if(!chudu[i])SAP.add(i,T,inf),SAP.add(T,i,);
}
for(i=;i<=n;++i)
{
if(du[i]>)SAP.add(SS,i,du[i]),SAP.add(i,SS,);
if(du[i]<)SAP.add(i,TT,-du[i]),SAP.add(TT,i,);
}
SAP.get_ans(S,T,SS,TT);
}
[BZOJ2502]清理雪道 有上下界网络流(最小流)的更多相关文章
- BZOJ2502:清理雪道(有上下界最小流)
Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时 ...
- Bzoj 2502: 清理雪道 有上下界网络流_最小流
好长时间没有写网络流了,感觉好手生.对于本题,设一个源点 $s$ 和 $t$.1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.2.由每个点向 $t$ 连一条没有下界,容量为 ...
- P4843 清理雪道(上下界网络流)
P4843 清理雪道 上下界最小流 我们先搞一遍上下界可行流(转) 回忆上下界最大流的写法:在可行流的残量网络$s\ -\ t$上跑最大流,答案为可行流$+$残量网络的最大流 那么上下界最小流的写法呢 ...
- 【bzoj2502】清理雪道 有上下界最小流
题目描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞 ...
- 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 594 Solved: 318[Submit][Status][Discuss] ...
- 【BZOJ2502】清理雪道 有上下界的网络流 最小流
[BZOJ2502]清理雪道 Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降 ...
- sgu 176 有源汇有上下界的最小流模板题
/*参考博文:http://hi.baidu.com/dragon_eric123/item/82e259200ece744046996282 有上下界的有源最小流 */ #include<st ...
- BZOJ 2502: 清理雪道 | 有上下界最小流
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...
- sgu 176 上下界网络流最小可行流带输出方案
算法步骤: 1. 先将原图像最大可行流那样变换,唯一不同的是不加dst->src那条边来将它变成无源无汇的网络流图.直接跑一边超级源到超级汇的最大流. 2. 加上刚才没有加上的那条边p 3. 再 ...
随机推荐
- loadrunner脚本编写经验
最近写了不少loadrunner脚本,记录一下心得:1 loadrunner脚本基本可以认为就是c语言代码(loadrunner支持不同语言的脚本,默认生成的是用c语言写的脚本)2 loadrunne ...
- SQL知识点脑图(一张图总结SQL)
sql语言的分类DDL:create drop alter DML:insert delete update DCL:rollback grant revoke commit 概要,主外键,视图,索引 ...
- 容器类 - bootStrap4常用CSS笔记
.container 居中容器类,最大宽度默认为1200px.左右间隙15px .container-fluid 全屏容器类. .jumbotron 创建一个大的灰色的圆角背景框 .jumbotron ...
- birt 访问频繁报错Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver
一般birt项目都是部署tomcat启动.这个问题大概率是因为没有配置JNDI数据源的原因. 参考链接: https://www.cnblogs.com/xdp-gacl/p/3951952.html
- 微信小程序video视频组件
支持mp4和m3u8的视频格式,其中mp4的需要是h264的视频编码 .1.如果您使用video组件是mp4的但不能播放,大部分是由于编码的问题,当然排除文件不存在等这些客观的因素条件.2.如果使用m ...
- 基于python的scrapy框架爬取豆瓣电影及其可视化
1.Scrapy框架介绍 主要介绍,spiders,engine,scheduler,downloader,Item pipeline scrapy常见命令如下: 对应在scrapy文件中有,自己增加 ...
- c++文件对齐
头文件#include <iomanip> 关键词:setw(n),std::left,std::right 实例:输出一个0-4的12*12方阵,要求数字宽度为4,居左对齐,右下角输出出 ...
- Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法
#1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...
- Objective-C中,类方法的getter和setter可以用点运算符吗?
Objective-C中,对象实例property的getter和setter可以使用点运算符来操作,那么类方法的getter和setter可以使用点运算吗? 答案是肯定的. 看如下代码: #impo ...
- eclipse异常关闭,而Tomcat然在运行解决方法
1.eclipse异常关闭,而Tomcat然在运行,再启动tomcat会出现端口冲突 解决方法:打开任务管理器,找到javaw.exe,点击关闭,就可以了