time limit: 10 sec memory limit: 128 mb
submit: 1039 solved: 561
[submit][status][discuss]
滑雪場坐落在
fj省西北部的若干座山上。
從空中鳥瞰,滑雪場可以看作乙個有向無環圖,每條弧代表乙個斜坡(即雪道),弧的方向代表斜坡下降的方向。
你的團隊負責每週定時清理雪道。你們擁有一架直公升飛機,每次飛行可以從總部帶乙個人降落到滑雪場的某個地點,然後再飛回總部。從降落的地點出發,這個人可以順著斜坡向下滑行,並清理他所經過的雪道。
由於每次飛行的耗費是固定的,為了最小化耗費,你想知道如何用最少的飛行次數才能完成清理雪道的任務。
輸入檔案的第一行包含乙個整數
n(2 <= n
<= 100) –
代表滑雪場的地點的數量。接下來的
n行,描述
1~n號地點出發的斜坡,第
i行的第乙個數為
mi(0 <= mi
< n)
,後面共有
mi個整數,由空格隔開,每個整數
aij互不相同,代表從地點
i下降到地點
aij的斜坡。每個地點至少有乙個斜坡與之相連。
輸出檔案的第一行是乙個整數k–
直公升飛機的最少飛行次數。
81 3
1 72 4 5
1 81 8
02 6 504
題意就是給你乙個拓撲圖,每條邊流量下限為1
有乙個原點可以向每個點流流量,問最小流多少
這裡我們就來解決這個有源匯上下界最小流問題
先跑出可行流
但可行流不一定最小(可以隨手yy)
那麼我們如何搞掉多餘的流量呢
考慮由s->t的過程是增廣
由t->s的過程就是對s->t的流的縮減(感性/理性理解)
所以在得到可行流後
做t->s的最大流 並將其從答案減去就好了
注意:
在我們求解可行流的過程中,應用新源匯對所有點連邊
此題中特殊在於源匯沒有流量限制,所以連不連無所謂
第二遍跑dinic是在殘量網路上跑
不能跑完之後用邊權和求最大流
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}void print(int x)
const int n=210,m=100100,inf=0x3f3f3f3f;
int ecnt=1,last[n];
struct edgee[m];
inline void readd(int u,int v,int val)
;last[u]=ecnt;}
inline void add(int u,int v,int val)
int in[n];
int n,ans;
int s=n-2,t=n-1;
int d[n],q[n];
bool bfs(int s,int t)/*8
1 31 7
2 4 5
1 81 8
02 6 504
*/
有源匯上下界最小流 模板
這只是 其中一種 做法 這只是其中一種做法 這只是其中一 種做法 我暫時還沒有理解,只是先放個模板而已 首 先還 是根據下 界來建圖 原圖源 點s,匯 點t 首先還是根據下界來建圖,原圖源點s,匯點t 首先還是根據 下界來建 圖,原圖 源點s,匯點t 然 後因 為流量守 恆,新建 超級源s 1和超級...
117 有源匯有上下界最小流
題目描述 n nn 個點,m mm 條邊,每條邊 e ee 有乙個流量下界 lower e text e lower e 和流量上界 upper e text e upper e 給定源點 s ss 與匯點 t tt,求源點到匯點的最小流。輸入格式 第一行兩個正整數 n nn m mm s ss t...
有源匯有上下界最大 最小流
建圖還是要想一想的.寫一下吧 首先根據有源匯可行流建圖,正向附加邊滿流證明有可行流 然後在這個殘量網路上刪掉 t,s,oo 這條邊,跑 s t 最大流就是最大流,t s 最大流就是最小流 include define int long long define ll long long define ...