2018.08.20 loj#117. 有源汇有上下界最小流(模板)
传送门
这题真有意思。。。
先是有一个点T的我怀疑人生。
然后学大佬们封装了我的dinic就莫名其妙的过了???
所以说锅给谁好呢?
给dinic吧。。。
解法就是先求出一段可行流,然后从t到s加一条容量为inf的边将能缩回去的都缩回去。
代码:
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005
#define M 2000010
using namespace std;
#define rep(i,st,ed) for(register int i=st,i##end=ed;i<=i##end;++i)
#define drep(i,st,ed) for(register int i=st,i##end=ed;i>=i##end;--i)
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
ll ans;
int S,T;
struct Node{int v,next,c;};
struct Max_Flow{
int n,cur[N],first[N],d[N],cnt;
Node e[M];
inline void add_edge(int u,int v,int c){e[++cnt].v=v,e[cnt].next=first[u],e[cnt].c=c,first[u]=cnt;}
inline void add(int u,int v,int c){add_edge(u,v,c),add_edge(v,u,0);}
inline bool bfs(){
rep(i,1,n)d[i]=-1;
queue<int>q;
q.push(S),d[S]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=first[x];i;i=e[i].next){
int v=e[i].v;
if(e[i].c&&d[v]==-1){
d[v]=d[x]+1;
if(v==T)return true;
q.push(v);
}
}
}
return false;
}
inline int dfs(int x,int f){
if(x==T||!f)return f;
int flow=f,tmp;
for(int &i=cur[x];i;i=e[i].next){
int v=e[i].v;
if(e[i].c&&d[v]==d[x]+1){
tmp=dfs(v,min(e[i].c,flow));
if(!tmp)d[v]=-1;
e[i].c-=tmp,e[i^1].c+=tmp,flow-=tmp;
if(!flow)return f;
}
}
return f-flow;
}
inline void solve(){while(bfs()){rep(i,1,n)cur[i]=first[i];ans+=dfs(S,inf);}}
}Dinic;
int sum[N];
int main(){
Dinic.cnt=1;
int n=read(),m=read(),ss=read(),tt=read();
S=n+1,T=n+2,Dinic.n=T;
rep(i,1,m){
int u=read(),v=read(),down=read(),up=read();
sum[u]-=down,sum[v]+=down,Dinic.add(u,v,up-down);
}
rep(i,1,n){
if(sum[i]>0)Dinic.add(S,i,sum[i]);
if(sum[i]<0)ans+=sum[i],Dinic.add(i,T,-sum[i]);
}
Dinic.solve(),Dinic.add(tt,ss,inf),Dinic.solve();
if(ans){cout<<"please go home to sleep";return 0;}
cout<<Dinic.e[Dinic.cnt].c;
return 0;
}
2018.08.20 loj#117. 有源汇有上下界最小流(模板)的更多相关文章
- 2018.08.20 loj#116. 有源汇有上下界最大流(模板)
传送门 貌似就是转成无源汇,然后两遍最大流搞定? 其实第二遍跑最大流是自动加上了第一次的答案. 代码: #include<bits/stdc++.h> #define N 100005 # ...
- loj #117. 有源汇有上下界最小流
题目链接 有源汇有上下界最小流,->上下界网络流 注意细节,边数组也要算上后加到SS,TT边. #include<cstdio> #include<algorithm> ...
- 2018.08.20 loj#115. 无源汇有上下界可行流(模板)
传送门 又get到一个新技能,好兴奋的说啊. 一道无源汇有上下界可行流的模板题. 其实这东西也不难,就是将下界变形而已. 准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源 ...
- LOJ.117.[模板]有源汇有上下界最小流(Dinic)
题目链接 有源汇有上下界最小流 Sol1. 首先和无源汇网络流一样建图,求SS->TT最大流: 然后连边(T->S,[0,INF]),再求一遍SS->TT最大流,答案为新添加边的流量 ...
- loj #116. 有源汇有上下界最大流
题目链接 有源汇有上下界最大流,->上下界网络流 注意细节,重置cur和dis数组时,有n+2个点 #include<cstdio> #include<algorithm> ...
- sgu 176 Flow construction(有源汇的上下界最小流)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11025 [模型] 有源汇点的上下界最小流.即既满足上下界又满足 ...
- Flow construction SGU - 176 有源汇有上下界最小流 二分法和回流法
/** 题目:Flow construction SGU - 176 链接:https://vjudge.net/problem/SGU-176 题意: 有源汇有上下界的最小流. 给定n个点,m个管道 ...
- Loj#116-[模板]有源汇有上下界最大流
正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...
- Crazy Circuits HDU - 3157(有源汇有上下界最小流)
给出每条边的下界 求最小流 板题 提供两个板子代码 虽然这个题 第一个比较快 但在loj上https://loj.ac/problem/117 的板题 第一个1700+ms 第二个才600+ms ...
随机推荐
- UI5-文档-4.4-XML Views
将所有UI放到index.html文件将很快导致一个混乱的设置,有相当多的工作在我们前面.我们先用sap.m.Text进行模块化.控件导入专用视图. SAPUI5支持多种视图类型(XML.HTML.J ...
- ubuntu 安装MySQLdb
ubuntu运行sudo pip install MySQL-python安装MySQLdb时报错:Command "python setup.py egg_info" faile ...
- HIBERNATE知识复习记录1-连接及常用方法
要去面试了,复习一下HIBERNATE的相关知识吧,原来边看视频边写的代码如下,已经分不清先后次序了,大致看一看吧. 先看下总的配置文件hibernate.cfg.xml: <?xml vers ...
- dubbo-admin 管理平台
一.前言 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin.通过dubb ...
- wordpress 下载主题模板、更新报错 No working transports found解决办法
出错原因是PHP没有开启curl. windows下开启方法如下 1. 将php.ini中的;extension=php_curl.dll前的分号去掉, 2. 将php中libeay32.ll, ss ...
- CSS中的各种width(宽度)
一 window对象的innerWidth.outerWidth innerWidth是可用区域的宽度(内容区 + 滚动条) outerWidth是浏览器窗口的宽度(可用区域的宽度+审查元素区域的宽度 ...
- volatile是否就是原子性/线程同步的
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- handler通信机制
package com.example.gp08_day26_handler3; import android.os.Bundle; import android.os.Handler; import ...
- CentOS 7安装zabbix步骤
Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...
- 安装运行Rovio
https://github.com/ethz-asl/rovio下载代码,该存储库包含ROVIO(Robust Visual Inertial Odometry)框架. https://github ...