link

题意&题解

code:

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define ll long long
#define inf 1000000001
#define y1 y1___
using namespace std;
char gc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
#define gc getchar
ll read(){
char ch=gc();ll x=;int op=;
for (;!isdigit(ch);ch=gc()) if (ch=='-') op=-;
for (;isdigit(ch);ch=gc()) x=(x<<)+(x<<)+ch-'';
return x*op;
}
#define N 60005
#define M 130005+N<<1
int n,m,cnt=,s_,t_,s,t,head[N],d[N],vis[N],cur[N];
struct edge{int to,nxt,c;}e[M];
void adde(int x,int y,int c){
e[++cnt].to=y;e[cnt].nxt=head[x];head[x]=cnt;
e[cnt].c=c;
}
void ins(int x,int y,int z){
adde(x,y,z);adde(y,x,);
}
bool bfs(){
queue<int> q;q.push(s);
rep (i,,t) vis[i]=-;vis[s]=;
while (!q.empty()){
int u=q.front();q.pop();
for (int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if (e[i].c&&vis[v]==-) vis[v]=vis[u]+,q.push(v);
}
}
return vis[t]!=-;
}
int dfs(int u,int flow){
if (u==t) return flow;
int w,used=;
for (int &i=cur[u];i;i=e[i].nxt){
int v=e[i].to;
if (e[i].c&&vis[v]==vis[u]+){
w=dfs(v,min(flow-used,e[i].c));
e[i].c-=w,e[i^].c+=w,used+=w;
if (used==flow) return used;
}
}
if (!used) vis[u]=-;
return used;
}
int dinic(){
int ret=;
while (bfs()){
memcpy(cur,head,sizeof(cur));//当前弧优化
ret+=dfs(s,inf);
}
return ret;
}
int main(){
n=read(),m=read(),s_=read(),t_=read();
rep (i,,m){
int x=read(),y=read(),a=read(),b=read();
ins(x,y,b-a);d[x]-=a,d[y]+=a;
}
s=n+,t=n+;
rep (i,,n) if (d[i]>) ins(s,i,d[i]);else ins(i,t,-d[i]);
dinic();//不加边直接跑,尽可能跑完
ins(t_,s_,inf);
dinic();//加边以后再跑
for (int i=head[s];i;i=e[i].nxt) if (vis[e[i].to]!=-) return puts("please go home to sleep"),;//判无解
printf("%d\n",e[cnt].c);
return ;
}

loj117 有源汇有上下界最小流的更多相关文章

  1. LOJ117 有源汇有上下界最小流(上下界网络流)

    跑出可行流后从原来的汇点向原来的源点跑最大流,原图最小流=inf-maxflow.显然超源超汇的相关边对其也没有影响.原图最小流=可行流-原图新增流量,因为t向s流量增加相当于s向t流量减少.但为什么 ...

  2. loj #117. 有源汇有上下界最小流

    题目链接 有源汇有上下界最小流,->上下界网络流 注意细节,边数组也要算上后加到SS,TT边. #include<cstdio> #include<algorithm> ...

  3. LOJ.117.[模板]有源汇有上下界最小流(Dinic)

    题目链接 有源汇有上下界最小流 Sol1. 首先和无源汇网络流一样建图,求SS->TT最大流: 然后连边(T->S,[0,INF]),再求一遍SS->TT最大流,答案为新添加边的流量 ...

  4. sgu 176 Flow construction(有源汇的上下界最小流)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11025 [模型] 有源汇点的上下界最小流.即既满足上下界又满足 ...

  5. Flow construction SGU - 176 有源汇有上下界最小流 二分法和回流法

    /** 题目:Flow construction SGU - 176 链接:https://vjudge.net/problem/SGU-176 题意: 有源汇有上下界的最小流. 给定n个点,m个管道 ...

  6. 【 POJ - 3801】Crazy Circuits(有源汇、上下界最小流)

    Description You’ve just built a circuit board for your new robot, and now you need to power it. Your ...

  7. bzoj 2502 清理雪道(有源汇的上下界最小流)

    [题意] 有一个DAG,要求每条边必须经过一次,求最少经过次数. [思路] 有上下界的最小流.  边的下界为1,上界为无穷.构造可行流模型,先不加ts边跑一遍最大流,然后加上t->s的inf边跑 ...

  8. sgu176 Flow Construction【有源汇有上下界最小流】

    同样是模板题. 首先将有源汇转换为无源汇,假设原来的源汇为st,我们加入的源汇为ST,那么我们应该从t到s连一条流量为+∞的边,使原来的st满足收支平衡,退化为普通节点. 分离必要边和其他边,从S到T ...

  9. Crazy Circuits HDU - 3157(有源汇有上下界最小流)

    给出每条边的下界 求最小流 板题 提供两个板子代码 虽然这个题 第一个比较快 但在loj上https://loj.ac/problem/117 的板题  第一个1700+ms 第二个才600+ms   ...

随机推荐

  1. jquery 中$符号六大作用

    jquery 中$符号六大作用 2012-12-16 86市场网 javascript a.$用作选择器, var e = $("h1 a"); var f = $("t ...

  2. thinkphp博客项目纪录

    项目地址:http://files.cnblogs.com/files/wordblog/blog.zip

  3. 搭建linux+nginx+mysql+php环境

    yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpn ...

  4. 用C#实现对MSSqlServer数据库的增删改查---Server层(WaterLevelRecordServer.cs、DeviceRecordServer.cs)

    抛开现实的残酷与无奈,对技术孜孜不倦的追求,从专注到执着,从疯狂到忘我,始终坚信代码可以改变世界,更能改变自己的人生. WaterLevelRecordServer.cs using System; ...

  5. 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞

    SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...

  6. rust 入门

    hello rust fn main() { println!("Hello, world!"); } 从hello world入手,rust的语法是比较简洁. 在mac os中, ...

  7. tp 框架 利用反射实现对象调用方法

    <?php class Person{ public $name="xiaoming"; function say(){ echo "i am ".$th ...

  8. 在ubuntu 上安装pycharm

    1.首先在官网下载pycharm并进行提取,将提取的文件夹放在/usr下面(或者任意位置) 2.然后vi /etc/hosts 编辑 将0.0.0.0 account.jetbrains.com添加到 ...

  9. ireport报表,打印时,报表加载失败的解决方法

    1.报表加载失败图示 2.解决方法 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:http://www.cnblogs.com/dsh ...

  10. Ceph 时钟偏移问题 clock skew detected 解决方案--- 部署内网NTP服务

    告警:HEALTH_WARN clock skew detected on mon.ip-10-25-195-6; 8 requests are blocked > 32 sec; Monito ...