CF708D Incorrect Flow


有源汇上下界最小费用可行流。(= =)

对每条给定的边连边:

首先\(f_i\)是给定的,所以要有一条这个边而且要流满,先\(a_i-b_i\)连一条上下界为\([f_i,f_i]\)的边

如果\(f_i\leq c_i\),可以增加流量或者减少流量,如果减少只要减流量就可以了,如果增加,在\([f_i,c_i]\)这一段只要加流量,大于\(c_i\)就要流量和容量都加,整合一下,减少就是连反向边,\((b_i,a_i,f_i,1)\);增加有两段,费用是递增的,\((a_i,b_i,c_i-f_i,1),(a_i,b_i,inf,2)\)

如果\(f_i\geq c_i\),首先钦定把\(c_i\)加到\(f_i\),答案先加上\(f_i-c_i\)那么再增加流量就要流量和容量都加,连边\((a_i,b_i,inf,2)\);如果要减的话,可以发现最后的流量如果在\([c_i,f_i]\)这个范围内,修改量都是\(f_i-c_i\)的,这个已经加过了就不用管了,就是连\((b_i,a_i,f_i-c_i,0)\);继续减就要减流量了,连\((b_i,a_i,c_i,1)\)。

就做完了。

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int fir[110],dis[1010],nxt[1010],w[1010],cost[1010],id=1,S,T;
il vd link(int a,int b,int c,int d){
nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c,cost[id]=d;
nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0,cost[id]=-d;
}
il bool Mincost(ll&totalcost){
static int que[110],hd,tl,lst[110];
static ll dist[110];
static bool inq[110];
hd=tl=0;que[tl++]=S;inq[S]=1;
for(int i=1;i<=T;++i)dist[i]=1e9;
dist[S]=0;
while(hd^tl){
int x=que[hd];
for(int i=fir[x];i;i=nxt[i])
if(w[i]&&dist[dis[i]]>dist[x]+cost[i]){
dist[dis[i]]=dist[x]+cost[i],lst[dis[i]]=i;
if(!inq[dis[i]]){
inq[dis[i]]=1,que[tl++]=dis[i];
if(tl==110)tl=0;
}
}
inq[x]=0,++hd;
if(hd==110)hd=0;
}
if(dist[T]>0)return 0;
int flow=1e9;
for(int i=lst[T];i;i=lst[dis[i^1]])flow=std::min(flow,w[i]);
for(int i=lst[T];i;i=lst[dis[i^1]])totalcost+=1ll*flow*cost[i],w[i]-=flow,w[i^1]+=flow;
return 1;
}
int main(){
int n=gi(),m=gi(),a,b,c,f;S=n+1,T=n+2;
ll ans=0;
while(m--){
a=gi(),b=gi(),c=gi(),f=gi();
link(S,b,f,-100000000),link(a,T,f,-100000000);
ans+=f*200000000ll;
if(f<=c)link(a,b,c-f,1),link(a,b,1e9,2),link(b,a,f,1);
else ans+=f-c,link(a,b,1e9,2),link(b,a,f-c,0),link(b,a,c,1);
}
link(n,1,1e9,0);
while(Mincost(ans));printf("%lld\n",ans);
return 0;
}

CF708D Incorrect Flow的更多相关文章

  1. 题解-CF708D Incorrect Flow

    题面 CF708D Incorrect Flow 给一张网络流图,可能有流量不守恒或者流量超过容量的情况,求最少的将某条边流量或容量 \(\pm 1\) 的操作次数使得网络流图正确. 数据范围:\(1 ...

  2. 【CF708D】Incorrect Flow 最小费用可行流

    [CF708D]Incorrect Flow 题意:给你一个点数为n,边数为m的流网络,每条边有一个容量c和流量f,这个网络可能是不合法的.你可以花费1的代价使c或f减少或增加1,可以修改无限次.你不 ...

  3. @codeforces - 708D@ Incorrect Flow

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个有源点与汇点的图 G,并对于每一条边 (u, v) 给定 ...

  4. CSAPP Chapter 8:Exception Control Flow

    prcesssor在运行时,假设program counter的值为a0, a1, ... , an-1,每个ak表示相对应的instruction的地址.从ak到ak+1的变化被称为control ...

  5. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  6. [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流

    Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...

  7. BZOJ 4390: [Usaco2015 dec]Max Flow

    4390: [Usaco2015 dec]Max Flow Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 113[Submi ...

  8. ArcGIS制作放射状流向地图(Radial Flow Map)

    流向地图火了,因为Facebook的那张著名的友邻图,抑或因为<数据可视化之美>中介绍飞行模式的航线图,总之,流向地图以它特殊的可视化形式,直观地展示事物之间的联系,尤其在展示网络流向.贸 ...

  9. SSIS Data Flow优化

    一,数据流设计优化 数据流有两个特性:流和在内存缓冲区中处理数据,根据数据流的这两个特性,对数据流进行优化. 1,流,同时对数据进行提取,转换和加载操作 流,就是在source提取数据时,转换组件处理 ...

随机推荐

  1. 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

    [编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM ...

  2. 【已解决】mac上appium报错:“Could not find aapt Please set the ANDROID_HOME environment variable with the Android SDK root directory path”

    按照网上教程配置完appium环境后,真机跑自动化过程,遇到如下报错: appium报错如下: [ADB] Checking whether aapt is present [ADB] The AND ...

  3. LeetCode题解之 Letter Case Permutation

    1.题目描述 2.问题分析 可以使用递归的方法解决,参考了别人的答案才写出来的. 3.代码 vector<string> letterCasePermutation(string S) { ...

  4. MySQL SELECT语句中只能输出1000行数据的原因

    同事反映,客户的一套MySQL生产库,执行SELECT.. INTO OUTFILE语句只能导出1000行 最初以为是系统参数被重新设置了,建议他更改系统参数 mysql> set global ...

  5. spark任务调度和资源分配

    Spark调度模式 FIFO和FAIR     Spark中的调度模式主要有两种:FIFO和FAIR.    默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待 ...

  6. 解决PC有道云笔记卸载重装后无法数据同步问题

    将客户端内容成功同步后,按键盘win键选择文件资源管理器,将以下路径一次粘贴到搜索框按回车搜索,将搜索到的所有内容(文件,文件夹)全部删除,再重启软件登录账户同步试试看 配置目录:%USERPROFI ...

  7. 部署weblogic遇到的问题总结

    myeclipse开发的项目,运行在tomcat7上完全正常.部署到weblogic10上就出现了问题,现把问题记录一下: 1.找不到javax/servlet/jsp/jstl/core/Condi ...

  8. es6安装babel包

    1.前面下载node.js及安装淘宝镜像可以查看我写的vue.js环境搭建 2.安装完node后,安装babel npm install -g babel-cli 3.检验babel是否安装成功: b ...

  9. 设计模式_享元设计模式(flyweight)

    享元模式以共享的方式高效地支持大量的细粒度对象.很多很小的对象,这些对象有很多共同的东西,那就变成一个对象,还有些不同的东西,作为外部的属性,用方法的参数传入 public class Flyweig ...

  10. es5与es6继承思考

    es5与es6继承思考 es6继承 class Father{ constructor(name){ this.name = name; } getName(){ console.log(this.n ...