網路流 24 題 星際轉移

2021-08-07 02:26:08 字數 2545 閱讀 2911

題目描述

由於人類對自然資源的消耗,人們意識到大約在 2300 年之後,地球就不能再居住了。

於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,

地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。

現有 n n

n 個太空站位於地球與月球之間,且有 m m

m 艘公共運輸太空船在其間來回穿梭。

每個太空站可容納無限多的人,而每艘太空船 i i

i 只可容納 hi h_ih​

i​​ 個人。每艘太空船將周期性地停靠一系列的太空站,

例如: \

表示該太空船將周期性地停靠太空站 134134134 …

每一艘太空船從乙個太空站駛往任一太空站耗時均為 1 11。

人們只能在太空船停靠太空站(或月球、地球)時上、下船。

初始時所有人全在地球上,太空船全在初始站。

試設計乙個演算法,找出讓所有人盡快地全部轉移到月球上的運輸方案。

輸入格式

檔案第 1 1

1 行有 3 3

3 個正整數 n n

n(太空站個數)、m m

m(太空船個數)和 k k

k(需要運送的地球上的人的個數)。

接下來的 m m

m 行給出太空船的資訊。第 i+1 i + 1i+

1 行說明太空船 i ii。

第 1 1

1 個數表示 i i

i 可容納的人數 hi h_ih​

i​​,第 2 2

2 個數表示 i i

i 乙個週期停靠的太空站個數 r r

r,(1≤r≤n+2 1 \leq r \leq n + 21≤

r≤n+

2),隨後 r r

r 個數是停靠的太空站的編號  \_1, _2, \ldots, _r \}

,地球用 0 0

0 表示,月球用 −1 -1−1

表示。時刻 0 0

0 時,所有太空船都在初始站,然後開始執行。在時刻 1,2,3,… 1, 2, 3, \ldots1,

2,3,

… 等正點時刻各艘太空船停靠相應的太空站。

人只有在 0,1,2… 0, 1, 2 \ldots0,

1,2…

等正點時刻才能上下太空船。

輸出格式

輸出全部人員安全轉移所需的時間。如果無解,則輸出 0 00。

樣例樣例輸入

2 2 1

1 3 0 1 2

1 3 1 2 –1

樣例輸出

5
建圖好複雜,看了題解才弄懂,第一次做分層圖網路流。
直接求天數是求不出來的,只能從小到大列舉天數,因為每次都是在前一天的殘留網路基礎上加點加邊所以複雜度不高。
我們把每天的每個太空站以及地球和月亮都作為乙個點,對於第i天,源點s和i*n+2也就是地球建一容量為inf的邊,
i*n+1也就是

月亮和匯點建容量為inf的邊,而對於每個太空船前一天所在太空站(i-1)*n+a[i][(j-1)%len[i]]和今天所在太空站

i*n+a[i][j%len[i]]建一容量為太空船容量的邊,從小到大列舉天數,知道每天的最大流之和大於等於k就是最小天數了。
#include#include#include#includeusing namespace std;

const int maxm = 1000000;

const int inf = 1e9 + 7;

struct node

edge[maxm];

int head[maxm], dis[maxm], cur[maxm], flag[maxm];

int a[105][105], len[maxm], b[105];

int cnt, s, t, n, m;

void init()

void add(int u, int v, int w)

int bfs()

} }if (dis[t] == -1) return 0;

return 1;

}int dfs(int u, int flow)

} }return 0;

}int dinic()

return ans;

}int main()

} int ans = 0, sum = 0;

while (1)

}sum += dinic();

if (sum >= k) break;

ans++;

} if (ans == 100) printf("0\n");

else printf("%d\n", ans);

return 0;

}

網路流24題 星際轉移問題

這個問題的難點在於如何表示時間的流逝很容易 想到源點 是地球,然後中間 一串的空 間站,最 後連向匯 點月 球很容易想到源點是地球,然後中間一串的空間站,最後連向匯點月球 很容易想到源 點是地球 然後中 間一串的 空間站,最後連向 匯點月球空間 站間各自 連邊,流 量是飛船 的容 量空間站間各自連邊...

網路流24題 星際轉移問題

description 由於人類對自然資源的消耗,人們意識到大約在 2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有 n 個太空站位於地球與月球之間,且有 ...

網路流24題之星際轉移問題

一開始以為跑費用流,後來看了題解才知道可以按天建圖。1.從源點向每一天的地球鏈結一條inf 2.從每一天的月亮向匯點鏈結一條inf 4.針對每一艘飛船,獲取其上一天的位置,再獲取這一天的位置,在這兩個點之間連一條容量為飛船滿載人數的流 每次新加一天然後跑到最大流超過k即可 至於無解的情況只要當ans...