每個城市i多(缺)電量left[i],可以耗費in[i]從外面輸入電量,out[i]向外面輸出電量,或者有一些有向邊可以轉移電量,這些有向邊的流量有上界和下界,代價為a*x2+b,x為流量。求最少滿足電量剛剛好為0的方案數。
走反向邊之後費用不再+2a,因為反向邊同於撤銷操作,所以費用應該-2a,即還原回去。
費用流我打的是ek,比較慢,但是方便每一次修改邊的費用。
#include#include#include#include#define maxn 205
#define maxm 10005
#define maxd 1005
#define inf 2e9
#define i(x) ((x&1)?x+1:x-1)
using namespace std;
int n,m,i,j,k,x,y,a,b,l,u,left[maxn],in[maxn],out[maxn],ans;
int s,t,ss,tt;
int em,e[maxm],nx[maxm],ls[maxn],ec[maxm],va[maxm],vb[maxm],ct[maxm],tp[maxm];
int dis[maxn],vis[maxn],d[maxd],fa[maxn],fai[maxn],t,w;
void insert(int x,int y,int flow,int a,int b,int cnt)
void link(int x,int y,int low,int up,int v)
int cost(int i)
int spfa()
for(i=1;i<=m;i++)
insert(t,s,inf,0,0,1);
ekflow();
printf("%d",ans);
}
上下界網路流學習小計
有上下界的網路流。網路流有了建圖,其他都是浮雲。設立超級源ss和超級匯tt,原來的s和t還是有的。上下界網路流的建圖最好感性的理解,因為證明很複雜,就當做黑盒演算法。t向s連一條容量為 的邊。有一條u連向v的邊,下線為l,上限為r,那麼我們從s到u連 的邊,v到t連 的邊,從u到v連一條r l的邊。...
上下界網路流學習筆記
一些點,一堆邊,每條邊要滿足流量限制 l,r 先令每條邊流量等於流量下限,得到初始流,初始流可能不滿足流量守恆,再建出殘量網路 上限 下限 求出可能不滿足流量守恆的附加流,使附加流和初始流合併後滿足流量守恆 定義 a i 表示初始流中流入量 流出量 若 a i 0 表示流入量大於流出量,附加量需要流...
上下界網路流(3合1)
我打的是loj的板子,因為比較全 具體做法就是將每一條限制為 l,r 的邊 u,v 拆開 連線 s,v 容量為l,u,t 容量為l,u,v 容量為r l 大家可以感性地理解一下 資料範圍大的時候,可以先記錄每個點與起點終點的流量,最後減一減,一起連邊就好了 include include inclu...