題目:
題目描述
汶川**發生時,四川**中學正在上課,一看**發生,老師們立刻帶領x名學生逃跑,整個學校可以抽象地看成乙個有向圖,圖中有n個點,m條邊。1號點為教室,n號點為安全地帶,每條邊都只能容納一定量的學生,超過樓就要倒塌,由於人數太多,校長決定讓同學們分成幾批逃生,只有第一批學生全部逃生完畢後,第二批學生才能從1號點出發逃生,現在請你幫校長算算,每批最多能運出多少個學生,x名學生分幾批才能運完。
輸入格式
第一行3個整數n,m,x(x<2^31,n<=200,m<=2000);以下m行,每行三個整數a,b,c(a1,a<>b,0描述一條邊,分別代表從a點到b點有一條邊,且可容納c名學生。
輸出格式
兩個整數,分別表示每批最多能運出多少個學生,x名學生分幾批才能運完。如果無法到達目的地(n號點)則輸出「orz ni jinan saint cow!」
輸入輸出樣例
輸入 #1 複製
6 7 7
1 2 1
1 4 2
2 3 1
4 5 1
4 3 1
3 6 2
5 6 1
輸出 #1 複製
3 3解題思路:
讀入資料,跑一次dinic,然後需要判斷maxflow > 0? , 若是大於0,則計算次數然後輸出,若是等於0,直接輸出對應的字串。
注意:maxflow==0的時候不能除!!!
ac**:
#include #include #include #include using namespace std;
typedef long long ll;
const int n = 300, m = 8000;
const ll inf = 0x3f3f3f3f3f3f3f3f;
int n, m, s, t;
int h[n], e[m], ne[m], idx;
int d[n];
ll maxflow, w[m], x;
inline void add(int a, int b, int c)
inline bool bfs(void)
} }if(d[t] == 0) return false;
return true;
}inline ll dinic(int u, ll flow)
} }return 0;
}int main(void)
ll flow = 0;
s = 1, t = n;
while(bfs())
while(flow = dinic(s, inf)) maxflow += flow;
if(maxflow > 0) else puts("orz ni jinan saint cow!");
// fclose(stdin);
return 0;
}
洛谷P1343 網路最大流
模板題,注意判斷最大流是否為0 連線 include include include include include include include include include include include include using namespace std typedef long lo...
洛谷P3376 最大網路流模板
如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入輸出格式輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行...
洛谷P3381 MCMF 網路流
如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含四個正整數ui vi wi fi,表示第i條有向邊從ui出發,到達vi,邊...