hdu3879 網路流(經典最大獲利問題)

2021-06-14 17:16:47 字數 905 閱讀 2337

這題建圖自己想了半天搞不懂,然後看了一下別人的建圖。。。一臉茫然。。

最後去看了下胡波濤的《最小割模型在資訊學競賽的應用》裡面詳細的講解了將最大獲利問題轉換為最小割模型的過程。

建圖:源點與人連邊,容量為獲利。站點與匯點連邊,容量為耗資。然後是相應的人與其需求的站點連邊,容量為無窮。

這樣建圖就完成了,然後就是找最小割,即割邊上的值便為不能獲取的利潤值,用總值減去得出最大利潤。

#include#include#include#define maxn 60000 //點的個數

#define inf 1e8

#define min(a,b) (ab?a:b)

using namespace std;

struct edge

e[400050]; //邊的個數 記得乘2

int head[maxn],ecnt;

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

int l,r,mid;

int n,m,scr,sink,vn,num;

void insert(int u,int v,int w)

int sap(int s,int t,int n)//核心**(模版)

gap[s]=n;

bool flag;

while(dis[s]0&&dis[u]==dis[v]+1)

aug=inf;

}break;//找到一條就退出}}

if(flag) continue;

int mindis=n;

for(i=head[u];i!=-1;i=e[i].next)

{v=e[i].v;

if(e[i].w>0&&dis[v]

poj1459 網路流經典

題意 給幾個發電站,給幾個消耗站,再給幾個 點。發電站只發電,消耗站只消耗電,點只是 電,再給各個傳送線的傳電能力。問你消耗站能獲得的最多電是多少。思路 增加乙個超級源點,和超級匯點。把所給的發電站都和超級源點相連,把所給的消耗戰都和超級匯點相連。用ek求最大流。include include us...

UVA 1658(網路流經典拆點方法)

把每個點 除了1,n 之外拆成i和i1,兩點間連一條容量為1,費用為零的邊,這樣可以限定,每個點只被跑到一次,那麼之後跑乙個最流量為2的最小費用流就可以了。至於其他邊,流量設為1,保證每個邊只被跑到一次。pragma comment linker,stack 1024000000,102400000...

HDU 4292 網路流最大流

題目大意 有n個人,f的food,d的飲料,每個人對事物和飲料有偏好,並且如果乙個人沒有飲料或者事物他就會離開,問最後最多有幾個人留下來 題目解析 開始是超級食物匯點,中間是人,因為每個人最多選一種食物,所以人與自己也要加一條邊,最後是超級飲料匯點,最大流ek即可 ac include includ...