[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. 再 ...
随机推荐
- Cloud Native Weekly | 华为云抢先发布Redis5.0,红帽宣布收购混合云提供商 NooBaa
1——华为云抢先发布Redis5.0 2——DigitalOcean K8s服务正式上线 3——红帽宣布收购混合云提供商 NooBaa 4——微软发布多项 Azure Kubernetes 服务更新 ...
- VB.NET 仿Edge风格的TabControl控件
原本是想写个Chrome内核的浏览器,但是.net语言下比较好用类库的并不多,尝试过CefSharp.Xilium.CefGlue,都发现很多坑,所以这个项目就烂尾了,现在将还有点用的代码发出来给大家 ...
- rest的Web服务端获取http请求头字段
如上图所示 输出的i就是获取的头字段的值 (仅自己记录)
- electron快速开始
初学electron 接触了两周的electron,感觉还不错,以后pc端基本上可以用electron加壳写pc端应用了,可以用nodejs的模块,也可以用es6.7,还可以直接操作系统文件.基本上可 ...
- C++ chrono 库中的 steady_clock 和 system_clock
C++11 中提供了一个计时的标准库 <chrono>; 里面有三种时钟 clock: steady_clock, system_clock 和 high_resolution_clock ...
- 使用AD对Linux客户端进行身份验证
https://technet.microsoft.com/zh-cn/library/2008.12.linux.aspx
- Lwip:原生态的Linux socket应用如何移植到Lwip上
lwIP - A Lightweight TCP/IP stack 在上一篇中,我们了解到在OpenFastPath上如何移植原生态的Linux Socket应用程序,那么,对于另外一个老牌的小型TC ...
- GTK 预置对话框 GtkDialog 文件/颜色/字体选取等 GtkFileSelection
(GTK2) 文档链接 作用:打开一个预置的对话框,如文件选取对话框 GtkFileSelection 效果下图所示 ╰── GtkDialog ├── GtkAboutDialog ├── GtkC ...
- NO.7:自学python之路------类的方法、异常处理、socket网络编程
引言 我visual studio 2017就算体积巨大.启动巨慢.功能简陋也不会安装PyCharm的,嘿呀,真香.好吧,为了实现socket网络编程,更换了软件. 正文 静态方法 只是在名义上归类管 ...
- Eclipse各版本分析比较
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会. Ec ...