網路流24題 星際轉移問題

2022-05-31 04:24:11 字數 2537 閱讀 3516

description

由於人類對自然資源的消耗,人們意識到大約在$2300$年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,$2177$年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有$n$個太空站位於地球與月球之間,且有$m$艘公共運輸太空船在其間來回穿梭。每個太空站可容納無限多的人,而每艘太空船$i$只可容納$h_i$個人。每艘太空船將周期性地停靠一系列的太空站,

例如:$(1,3,4)$表示該太空船將周期性地停靠太空站$134134134...$。每一艘太空船從乙個太空站駛往任一太空站耗時均為$1$。人們只能在太空船停靠太空站(或月球、地球)時上、下船。

初始時所有人全在地球上,太空船全在初始站。求讓所有人全部轉移到月球上所需最短用時。

input

第$1$行有$3$個正整數$n$(太空站個數),$m$(太空船個數)和$k$(需要運送的地球上的人的個數)。

接下來的$m$行給出太空船的資訊。第$i+1$行說明太空船$p_i$。第$1$個數表示$p_i$可容納的人數$h_i$;第$2$個數表示$p_i$乙個週期停靠的太空站個數$r_i$;隨後$r_i$個數是停靠的太空站的編號:$s_,s_,...,s_$,地球用$0$表示,月球用$-1$表示。時刻$0$時,所有太空船都在初始站,然後開始執行。在時刻$1,2,3...$等正點時刻各艘太空船停靠相應的太空站。

人只有在$0,1,2...$等正點時刻才能上下太空船。

output

一行乙個整數,表示將全部人員安全轉移所需最短用時。如果問題無解,則輸出$0$。

sample input

2 2 1

1 3 0 1 2

1 3 1 2 –1

sample output

hint

$1\;\leq\;m\;\leq\;13,1\;\leq\;n\;\leq\;20,1\;\leq\;k\;\leq\;50,1\;\leq\;r\;\leq\;n+2$.

solution

遍歷判斷從地球到月球是否存在一條路徑,若不存在,則無解.

將每個點按時間拆成$d$個點,$x_$表示第$i$個太空站第$d$天的情況.

順序列舉答案$d$.

從$s$到$x_$連一條容量為$+\infty$的有向邊,

從$x_$到$t$連一條容量為$+\infty$的有向邊,

從$x_$到$x_$連一條容量為$+\infty$的有向邊,

若存在某艘太空船$k$,第$d-1$天在$i$,第$d$天在$j$,從$x_$到$x_$連一條容量為$h_k$的有向邊.

求最大流,若流量$\;\leq\;k$,則$d$為答案.

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 25

#define k 1105

#define m 77005

using

namespace

std;

struct

graphe[m],e1[k];

inta[n][n],h[n],r[n],g[k],g1[n],dep[k],n,m,k,s,t,fl,tot,cnt;

bool

v[n];

queue

q;inline

void added(int x,int

y)inline

void addedge(int x,int y,int

f)inline

void adde(int x,int y,int

f) inline

int f(int

d)inline

bool bfs(int

u) }

return

dep[t];

}inline

int dfs(int u,int

f)

return

ret;

}inline

intdinic()

}inline

bool chk(int

u) }

return

false;}

inline

void

aireen()

for(int j=1;jj)

added(a[i][j-1

],a[i][j]);

if(r[i]>1) added(a[i][r[i]-1],a[i][0

]); }

if(!chk(n+1

)) s=0;t=k-1;tot=n+2;cnt=1

; adde(

0,n+1,m);adde(n+2

,t,m);

for(int d=1;;++d)

}

}int

main()

網路流24題 星際轉移問題

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

網路流 24 題 星際轉移

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

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

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