题目链接

有源汇有上下界最大流,->上下界网络流

注意细节,重置cur和dis数组时,有n+2个点

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream> using namespace std; const int N = ;
const int INF = 1e9; struct Edge {
int to,nxt,c;
}e[];
int head[N],dis[N],cur[N],M[N];
int q[],L,R;
int n,m,S,T,tot = ,Sum; inline char nc() {
static char buf[],*p1 = buf,*p2 = buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
inline int read() {
int x = ,f = ;char ch = nc();
for (; ch<''||ch>''; ch=nc()) if(ch=='-') f=-;
for (; ch>=''&&ch<=''; ch=nc()) x=x*+ch-'';
return x * f;
}
void add_edge(int u,int v,int c) {
e[++tot].to = v,e[tot].c = c,e[tot].nxt = head[u],head[u] = tot;
}
bool bfs() {
for (int i=; i<=n+; ++i) // n+2
cur[i] = head[i],dis[i] = -;
L = ,R = ;
q[++R] = S;
dis[S] = ;
while (L <= R) {
int u = q[L++];
for (int i=head[u]; i; i=e[i].nxt) {
int v = e[i].to;
if (dis[v] == - && e[i].c > ) {
dis[v] = dis[u] + ;
q[++R] = v;
if (v == T) return true;
}
}
}
return false;
}
int dfs(int u,int flow) {
if (u == T) return flow;
int used = ;
for (int &i=cur[u]; i; i=e[i].nxt) {
int v = e[i].to;
if (dis[v] == dis[u] + && e[i].c > ) {
int tmp = dfs(v,min(e[i].c,flow-used));
if (tmp > ) {
e[i].c -= tmp;e[i^].c += tmp;
used += tmp;
if (used == flow) break;
}
}
}
if (used != flow) dis[u] = -;
return used;
}
int dinic(int s,int t) {
S = s,T = t;
int ans = ;
while (bfs()) ans += dfs(S,INF);
return ans;
}
int main () {
freopen("1.txt","r",stdin);
n = read(),m = read();
int s = read(),t = read();
int ss = n+,tt = n+;
for (int i=; i<=m; ++i) {
int u = read(),v = read(),b = read(),c = read();
add_edge(u,v,c-b);
add_edge(v,u,);
M[u] -= b;M[v] += b;
}
for (int i=; i<=n; ++i) {
if (M[i] > ) add_edge(ss,i,M[i]),add_edge(i,ss,),Sum += M[i];
if (M[i] < ) add_edge(i,tt,-M[i]),add_edge(tt,i,);
}
add_edge(t,s,INF);
add_edge(s,t,);
if (dinic(ss,tt) != Sum) {
puts("please go home to sleep");
return ;
}
int ans = e[tot].c;
e[tot].c = ;e[tot ^ ].c = ;
ans += dinic(s,t);
printf("%d\n",ans);
return ;
}

loj #116. 有源汇有上下界最大流的更多相关文章

  1. 2018.08.20 loj#116. 有源汇有上下界最大流(模板)

    传送门 貌似就是转成无源汇,然后两遍最大流搞定? 其实第二遍跑最大流是自动加上了第一次的答案. 代码: #include<bits/stdc++.h> #define N 100005 # ...

  2. LibreOJ #116. 有源汇有上下界最大流

    二次联通门 : LibreOJ #116. 有源汇有上下界最大流 /* LibreOJ #116. 有源汇有上下界最大流 板子题 我也就会写写板子题了.. 写个板子第一个点还死活过不去... 只能打个 ...

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

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

  4. Loj#116-[模板]有源汇有上下界最大流

    正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...

  5. 2018.08.20 loj#117. 有源汇有上下界最小流(模板)

    传送门 这题真有意思... 先是有一个点T的我怀疑人生. 然后学大佬们封装了我的dinic就莫名其妙的过了??? 所以说锅给谁好呢? 给dinic吧... 解法就是先求出一段可行流,然后从t到s加一条 ...

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

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

  7. 【Loj116】有源汇有上下界最大流(网络流)

    [Loj116]有源汇有上下界最大流(网络流) 题面 Loj 题解 模板题. #include<iostream> #include<cstdio> #include<c ...

  8. LOJ116 - 有源汇有上下界最大流

    原题链接 Description 模板题啦~ Code //有源汇有上下界最大流 #include <cstdio> #include <cstring> #include & ...

  9. [poj] 2396 [zoj] 1994 budget || 有源汇的上下界可行流

    poj原题 zoj原题 //注意zoj最后一行不要多输出空行 现在要针对多赛区竞赛制定一个预算,该预算是一个行代表不同种类支出.列代表不同赛区支出的矩阵.组委会曾经开会讨论过各类支出的总和,以及各赛区 ...

随机推荐

  1. jQuery生成QRcode二维码

    jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  2. Linux下IP SAN共享存储操作记录

    一.简单介绍SAN,即存储区域网络(storage area network and SAN protocols),它是一种高速网络实现计算机与存储系统之间的数据传输.常见的分类是FC-SAN和IP- ...

  3. 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)

    一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...

  4. Individual Project - Word frequency program——12061154Joy

    Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...

  5. 《Linux内核设计与实现》第四章读书笔记

    4.1 多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务系统可以划分为两类: 非抢占式多任务进程会一直执行直到自己主动停止运行 抢占式多任务Linux/Unix使用的是抢占式 ...

  6. Visual

    #include   int main()   {   std::cout<<"Hello World !"<<std::endl;   char resp ...

  7. 小学四则运算APP 第一个冲刺 第七天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是完成的功能一: 程序代码: MainActivity代码: import andr ...

  8. redi集群测试

    redis集群的测试   原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ...

  9. panda迭代

    1.注意 - 不要尝试在迭代时修改任何对象.迭代是用于读取,迭代器返回原始对象(视图)的副本,因此更改将不会反映在原始对象上. 2.itertuples()方法将为DataFrame中的每一行返回一个 ...

  10. mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)

    更新表数据: update table_name set xxx=xxx where condition; 增加字段: alter table table_name add field type ot ...