[luogu 2754] 家園
傳送門分層圖上的最大流.按時間分層
建圖方法:
時間t不斷增加,每一天:
(1)從源點向每一天的地球連容量為inf的邊,流過該點相當於當天從地球出發
(2)從每一天的月亮向匯點連容量為inf的邊,流過該點相當於當天到達月球
(3)從上一天的每乙個中轉站向當天的對應節點連容量為inf的邊(留在中轉站等)
(4)針對每一艘飛船,獲取其上一天的位置,再獲取這一天的位置,在這兩個點之間連一條容量為飛船滿載人數的流 (人坐飛船走了一天)
求一次最大流,如果最大流超過k,則說明已經全部轉移,答案為t
如果t超過乙個很大的值maxans就無解,這裡設為500
實現細節上,注意編號的處理
s=0,t=(maxans+1)*n+3
第i天的節點編號為(i-1)*(n+2)+k
把地球k=1,月球k=2,n個中轉站k=3~n+2
#include#include#include#include#include#define maxc 105
#define maxn 10005
#define maxm 500005
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k;
struct edgee[maxm<<1];
int sz=1;
int head[maxn];
void add_edge(int u,int v,int w)
int deep[maxn];
bool bfs(int s,int t)}}
return 0;
}int dfs(int x,int t,int minf)
}return minf-rest;
}int dinic(int s,int t)
return maxflow;
}int man[maxc];
int scnt[maxc];
int stop[maxc][maxc];
int main()
if(ans==maxans) printf("0");
else printf("%d",ans);
}
網路流24題 CTSC1999 家園
地球和月球中間有 n n 個太空站,有 m role presentation m m艘太空船,k k 個人要從地球前往月球。已知每個太空站可以容納無限多的人,每艘太空船的承載人數為 hi role presentation hih i,以及它們的行駛路線 經過的每乙個太空站編號 任意兩個太空站之間...
網路流24題 CTSC1999 家園
對於這種乙個點 表面意義上的乙個點,比如說乙個位置 對應多種情況的 比如說隨著時間的推移有著不同的狀態,而且這種狀態 2 我們考慮在類似於分層圖上面跑網路流。比如說這道題,週期的暴力處理顯然是一件很棘手的事情,我們看到資料範圍這麼小,就可以想一想把每個時間點的圖都建出來 每個點對應哪乙個空間站在第幾...
CTSC1999 網路流24題 家園
題目 洛谷p2754。題目大意 有 n 個空間站,m 個飛船,每個飛船有各自的停靠站點,並且從第乙個停靠站點開始,不斷迴圈。每個飛船有不同的容量 1為月球,0為地球 每個飛船初始停在第乙個停靠站上,每過1s就會到下乙個停靠站。在空間站上的人可以選擇上飛船,也可以選擇不上飛船。現在有 k 個人要從地球...