bzoj 1834: [ZJOI2010]network 网络扩容】的更多相关文章

第一问直接跑最大流.然后将所有边再加一次,费用为扩容费用,容量为k,再从一个超级源点连一条容量为k,费用为0的边到原源点,从原汇点连一条同样的边到超级汇点,然  后跑最小费用最大流就OK了. ------------------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<iostream> #i…
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. Input 输入文件的第一行包含三个整数N,M,K,表示有向图的点数.边数以及所需要增加的流量. 接下来的M行每行包含四个整数u,v,C,W,表示一…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题意] 给定一个有向图,每条边有容量C,扩容费用W,问最大流和使容量增加K的最少扩容费用. [思路] 第一问就是费用为0的费用流 第二问在第一问的残量网络上操作,对于每条边都新加一条容量为inf,且费用为W的边.至于容量增加K,只要新建一个S点向1连一条容量为K费用为0的边即可.然后跑一遍最小费用最大流. [代码] #include<set> #include<cma…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W. 这里扩容费用是指将容量扩大1所需的费用.求: 1.在不扩容的情况下,1到N的最大流: 2.将1到N的最大流增加K所需的最小扩容费用. [题解] 对于第一问,直接计算最大流即可,对于第二问,在最大流的残余网络上 对于每条边建立费用为w容量无限的边,跑1到N的流量大小为k的费用流即可. [代码] #include…
#include<cstdio> #include<iostream> #include<cstring> #define M 100000 #define inf 2139062143 using namespace std; struct data { int l,r,w; }a[M]; *M],u[*M],v[*M],cnt=,n,m,K,ans; ,head1[M],next1[*M],fro[*M],u1[*M],v1[*M],w1[*M],f[M],fr[M…
第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然后从新建一个源点,连(s,1,k,0)表示要增加k的流量.跑最小费用最大流即可. #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std;…
对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vector> #include <cstdio> #include <queue> #include <algorithm> #include <cstring> #define setIO(s) freopen(s".in","r&…
一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #define maxn 1010 #define maxm 20010 #define inf 0x7fffffff using namespace std; struct…
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的isap错了T_T,可是完全没错啊!!!! 这题其实第一个问很简单,跑一次最大流即可.第二个问就是在跑完最大流的残量网络上每条边都扩充容量为oo,费用为边的费用,然后设个超级源连一条容量为k的边到点1,再跑一次费用流即可. 理由很简单,自己想,我就不说了. #include <cstdio> #i…
[算法]网络流-最大流+最小费用最大流(费用流) [题解] 第一问跑最大流. 第二问: 原始边相当于费用为0的边,再原图(跑过最大流的图)基础上添加带费用的边,容量为k(相当于inf). 第一问最大流使用了哪条边对第二问没有影响,因为费用流肯定优先往费用为0的边(原始边)跑. 限流k?添加超级源向1连容量k费用0的边即可. #include<cstdio> #include<cstring> #include<algorithm> using namespace std…