Codeforces 708D 费用流 (呃我们的考试题)
NB的题目背景
输入输出一样
考试的时候貌似只有gzz一个人搞出来了
%gzz
思路:
分情况讨论
add(x,y,C,E) C是费用 E是流量
1. f>c add(x,y,2,inf),add(y,x,0,f-c),add(y,x,1,c),ans+=f-c;
2. 否则add(x,y,1,c-f),add(x,y,2,inf),add(y,x,1,f);
因为原图中源汇流量不守恒 add(n,1,0,inf)
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 6666
#define M 666666
#define inf 0x3f3f3f3f
#define mem(x,y) memset(x,y,sizeof(x))
int n,m,xx,yy,cc,ff,ans,edge[M],cost[M],v[M],nxt[M],first[N],tot,vis[N],minn[N],d[N],with[N];
void Add(int x,int y,int C,int E){edge[tot]=E,cost[tot]=C,v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int C,int E){Add(x,y,C,E),Add(y,x,-C,0);}
bool tell(){
mem(vis,0),mem(with,0),mem(d,0x3f),mem(minn,0x3f);
queue<int>q;q.push(0),d[0]=0;
while(!q.empty()){
int t=q.front();q.pop();vis[t]=0;
for(int i=first[t];~i;i=nxt[i])
if(d[v[i]]>d[t]+cost[i]&&edge[i]){
with[v[i]]=i,d[v[i]]=d[t]+cost[i],minn[v[i]]=min(minn[t],edge[i]);
if(!vis[v[i]])vis[v[i]]=1,q.push(v[i]);
}
}return d[n]!=0x3f3f3f3f;
}
int zeng(){
for(int i=n;i;i=v[with[i]^1])
edge[with[i]]-=minn[n],edge[with[i]^1]+=minn[n];
return minn[n]*d[n];
}
int main(){
mem(first,-1),scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d%d%d",&xx,&yy,&cc,&ff);
d[yy]+=ff,d[xx]-=ff;
if(ff>=cc)add(xx,yy,2,inf),add(yy,xx,0,ff-cc),add(yy,xx,1,cc),ans+=ff-cc;
else add(xx,yy,1,cc-ff),add(xx,yy,2,inf),add(yy,xx,1,ff);
}
add(n,1,0,inf),n++;
for(int i=1;i<n;i++)if(d[i]>0)add(0,i,0,d[i]);else add(i,n,0,-d[i]);
while(tell())ans+=zeng();
printf("%d\n",ans);
}
Codeforces 708D 费用流 (呃我们的考试题)的更多相关文章
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
- Codeforces 362E 费用流
题意及思路:https://blog.csdn.net/mengxiang000000/article/details/52472696 代码: #define Hello the_cruel_wor ...
- Codeforces 708D 上下界费用流
给你一个网络流的图 图中可能会有流量不平衡和流量>容量的情况存在 每调整一单位的流量/容量 需要一个单位的花费 问最少需要多少花费使得原图调整为正确(可行)的网络流 设当前边信息为(u,v,f, ...
- CodeForces 164C Machine Programming 费用流
Machine Programming 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co One remark ...
- Codeforces Gym 100002 E "Evacuation Plan" 费用流
"Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces 280D k-Maximum Subsequence Sum [模拟费用流,线段树]
洛谷 Codeforces bzoj1,bzoj2 这可真是一道n倍经验题呢-- 思路 我首先想到了DP,然后矩阵,然后线段树,然后T飞-- 搜了题解之后发现是模拟费用流. 直接维护选k个子段时的最优 ...
- BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...
- Codeforces 362E Petya and Pipes 费用流建图
题意: 给一个网络中某些边增加容量,增加的总和最大为K,使得最大流最大. 费用流:在某条边增加单位流量的费用. 那么就可以2个点之间建2条边,第一条给定边(u,v,x,0)这条边费用为0 同时另一条边 ...
随机推荐
- 王立平--EditText实现单行显示,左側图标,提示信息
<EditText android:layout_width="200dp" android:layout_height=" ...
- string 简单实现
namespace ss{ class string { friend ostream& operator <<(ostream&, const string&); ...
- 文件类似性推断 -- SimHash
近期调研了一下simhash算法,它主要用在谷歌网页去重中.网上有非常多原理性的介绍. 既然能够用来推断文件的相似性,就想知道效果怎么样.simhash的准确度是否依赖于分词算法?是否和simhash ...
- 闭包(closure)与协程共用时要注意的事情
闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...
- MongoDB数据查询详解
查询全部 db.infos.find(); db.infos.find({"url":"www.baidu.com"}); id不要显示出来 db.info ...
- ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...
- ES6 | 关于class类 继承总结
子类必须在constructor方法中调用super方法,否则新建实例时会报错.这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工.如果不调用super方法,子类就得不到 ...
- 51nod 1268 和为K的组合 dfs
题目: 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K.如果可以,输出:& ...
- POJ 3278 Catch That Cow【BFS】
题意:给出n,k,其中n可以加1,可以减1,可以乘以2,问至少通过多少次变化使其变成k 可以先画出样例的部分状态空间树 可以知道搜索到的深度即为所需要的最小的变化次数 下面是学习的代码----@_@ ...
- vue.js---methods中一个方法调用另一个方法
new Vue({ el: '#app', data: { test:111, }, methods: { test1:function(){ alert(this.test) }, test2:fu ...