SGU194 帶上下限的最大流基礎

2021-06-08 11:30:46 字數 788 閱讀 7851

/*

對於有流量上下限的無源的網路流的可行流轉化為一般的有源匯點的最大流來做

(1)新增超級源點s和超級匯點t

(2)對於原有的邊(u,v,l(u,v),c(u,v))(l為流量下限,c為流量上限),新增邊(u,v,0,c-l);

(3)對於每個結點i,記w[i]=sum(l(u,i))-sum(l(i,v));

若w[i]>0,新增邊(s,i,w[i]),若w[i]<0,新增邊(i,t,-w[i]);

(4)求解s-t的最大流;

(5)當且僅當s的出邊和t的入邊滿流,原流量限制的無源網路流可行流有解;

(6)一組可行流的解為:

對於每條流量邊(u,v),可行流量為l(u,v)+其構造的圖中的流量.

*/#include #include #include #include using namespace std;

const int nn=300;

const int mm=200000;

const int inf=0x3fffffff;

int n,m,s,t,nv,en,head[nn],hash[nn];

struct edge

e[mm];

void add(int u,int v,int flow)

int dis[nn],pre[nn],gap[nn],cur[nn];

int sap()

if (!solve()) printf("no\n");

return 0;

}

SGU 194 無源無匯可行流求解

題意 n個點,m條邊,每條邊有容量限制 l c,每個點滿足容量平衡 流入等於流出 求可行解 無源無匯可行流問題,建立以乙個超級源點和超級匯點,由於原來最大流問題時候,流量下界其實為0,所以要轉化,把邊 設u v 的容量改為c l,但是這樣不平衡了,所以s流入v點l,u點流出到t要l,這樣 保證了u,...

HDU 2152 Fruit 帶上下界母函式

題目 題意 有n種水果,要用其中m個水果,限制每種水果的個數範圍,求組合數,把母函式弄懂再做這個實在沒難度 define max 1000 int c max tc max int l max r max include include includeint main memset c,0,size...

sgu176 有源匯上下界最小流

題意 有一堆點和邊,1起點,n終點,某些邊有可能必須滿流,要求滿足條件的最小流 解法 按原圖建邊,滿流的即上下界都是容量,但是這樣按有源匯上下界可行流求出來的可能不是最小流,那麼我們需要開始建邊的時候不要建從t到s的邊,先跑一邊從ss到tt的最大流,然後把該邊加上再跑一次從ss到tt的最大流,那麼從...