只說建圖 **用的模板都一樣,所以只發乙份就好了
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演算法在稠密圖上跑得飛快,在稀疏圖上還不...