網路流幾題

2021-06-07 14:24:23 字數 1570 閱讀 2049

只說建圖  **用的模板都一樣,所以只發乙份就好了

poj  1149   pigs : 這題建圖還真有點巧妙,首先建立超級源點和匯點,源點和每個豬圈的第乙個顧客連邊,容量為豬圈中的豬個數,如果乙個人是多個豬圈的第乙個顧客,那就把這些值加起來,再連邊,當然用鄰接表的話這就無所謂了。 剛開始我想的是把源點和每個豬圈連邊來著,然後豬圈再和每個第一位顧客連邊,後來一想,沒必要,而且豬圈的個數又比較多,只留顧客的話會極大的降低了圖的頂點數。

然後如果顧客j在顧客i後邊開啟了某個豬圈,則加邊i->j,容量為無窮,因為邁克可以根據顧客j的需求來將別的豬圈中的豬調整過來,所以設定為無窮大。

最後將每個顧客和匯點連邊,容量為希望買的豬的數目

下面是此題的**,我的模板要求編號是從1開始。

#include #include #include #include #include #include #include #include #include #define maxn 2222

#define maxm 222222

#define inf 1000000000

using namespace std;

struct node

edge[maxm];

int dist[maxn], numbs[maxn], src, des, n;

int head[maxn], e;

void add(int x, int y, int c)

void rev_bfs()

q[qtail++] = des;

dist[des] = 0;

numbs[0] = 1;

while(qhead != qtail)

}}void init()

int maxflow()

totalflow += augflow;

u = src;

}int i;

for(i = curhead[u]; i != -1; i = edge[i].next)

if(edge[i].cap > 0 && dist[u] == dist[edge[i].ver] + 1)break;

if(i != -1) // find an admissible arc, then advance

else // no admissible arc, then relabel this vertex

}return totalflow;

}int house[maxn];

int last[maxn];

int main()

scanf("%d", &need);

add(i + 1, des, need);

}n = n + 2;

rev_bfs();

printf("%d\n", maxflow());

return 0;

}

poj 1459 :建圖比較簡單,按照輸入直接建

poj1273: 最裸的一道題

poj 1966:無向圖的點連通度,模板題

poj 1637:混合圖尤拉迴路的判定

01揹包幾題

寫了幾道01揹包,感覺做的時候想了好久都做不出來,還是有點考察思維的。題意是乙個人要去投簡歷給m個學校想拿個offer,每個學校都有自己的申請費ai,這個人 存了n元錢,給出每個學校的申請費和拿到offer的機率,求出至少拿到乙個offer的最大概率 揹包容量是n元 思路 按照概率來說求 p1 至少...

zoj 動態規劃幾題(簡單)

1092 floyd 拼的對麼。就是算環的最大長度能否到1啦 include include include include using namespace std char a 1000 100 double b 100 100 char q 100 w 100 int m int qqq if ...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...