CTSC1999 家園(網路流)

2022-05-08 04:42:09 字數 3073 閱讀 1995

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

現有 n 個太空站位於地球與月球之間,且有 m 艘公共運輸太空船在其間來回穿梭。每個太空站可容納無限多的人,而每艘太空船 i 只可容納 h[i]個人。每艘太空船將周期性地停靠一系列的太空站,例如:(1,3,4)表示該太空船將周期性地停靠太空站 134134134…。每一艘太空船從乙個太空站駛往任一太空站耗時均為 1。人們只能在太空船停靠太空站(或月球、地球)時上、下船。

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

對於給定的太空船的資訊,找到讓所有人盡快地全部轉移到月球上的運輸方案。

輸入格式:

第 1 行有 3 個正整數 n(太空站個數),m(太空船個數)和 k(需要運送的地球上的人的個數)。其中 n<=13 m<=20, 1<=k<=50。

接下來的 m 行給出太空船的資訊。第 i+1 行說明太空船 pi。第 1 個數表示 pi 可容納的人數 hpi;第 2 個數表示 pi 乙個週期停靠的太空站個數 r,1<=r<=n+2;隨後 r 個數是停靠的太空站的編號(si1,si2,…,sir),地球用 0 表示,月球用-1 表示。

時刻 0 時,所有太空船都在初始站,然後開始執行。在時刻 1,2,3…等正點時刻各艘太空船停靠相應的太空站。人只有在 0,1,2…等正點時刻才能上下太空船。

輸出格式:

程式執行結束時,將全部人員安全轉移所需的時間輸出。如果問題

無解,則輸出 0。

輸入樣例#1: 複製

2 2 1

1 3 0 1 2

1 3 1 2 -1

輸出樣例#1: 複製

5

none!

又發現了一道神題;

網上說這題綜合了資訊學和物理上的狹義相對論

不愧是ctsc的題啊

本題的建模是真的難想啊

由於資料範圍較小,可以對每一天進行考慮。

考慮每一天時,對每個太空站都建個新的點代表當前天的太空站,地球和月球也新建。

從源點向地球連容量為inf的邊,月球向匯點連容量為inf的邊。

然後每個太空站可以從上一天留下inf

'>inf

個人,所以從前一天連一條容量為inf

'>inf

的邊。

考慮每個太空船,可以從前一天所在的點轉移h

i'>hi

個人過來,所以連一條容量為h

i'>hi

的邊。

然後跑最大流,最大流為當前天可送達的人數

建完邊直接從殘量網路繼續跑就行了

無解可以用並查集判,也可以判如果天數大於500,即乙個乙個的送,經過所有點都送不完的話,就無解。

1 #include2

using

namespace

std;

34 inline void read(int &x)

910 inline void print(int

x) 14 inline void write(int x)

1516

#define maxn 1000050

1718

int n,m,s,t,max_flow,tot=1

,k;19

int head[maxn],dis[maxn],vis[maxn],a[200][200],num[200],v[200

];20

struct edgee[maxn<<1

];21

22void add(int u,int v,int w) ,head[u]=tot;}

23void ins(int u,int v,int w)

2425

intbfs()

36 }return dis[t]<1e9;37}

3839

int dfs(int u,int

flow) 45}

46 dis[u]=-1;return0;

47}4849

intdinic() return

max_flow;55}

5657

intmain()

64int ans=1,res=0

;65 ins(s,0*(n+2)+2

,1e9);

66 ins(0*(n+2)+1

,t,1e9);

67while(1

) 75

76 res+=dinic();if(res>=k) return write(ans),0

;77 ans++;if(ans==500) return puts("

0"),0;78

}79return0;

80 }

題解 CTSC1999家園 網路流

建模方法類似我noi2019網路同步賽我的t1寫法 題解 noi2019route 70分 問題的焦點是 空間時間載具。下面這個圖會非常清楚 咕咕咕寫的話有點麻煩,模組化程式設計就稍微好寫點。資料範圍不超過100,不用怕mle,tle。發現一種很好用的除錯技巧,就是在add函式中輸出fr to w ...

CTSC 1999 家園 網路流24題 星際轉移

直接把每乙個點,每一天拆成乙個點。然後每個點到下一天連 inf 的邊。然後把飛船的路徑用容量為飛船容量的邊連線。然後跑網路流判斷是否滿流。include include include include include using namespace std define f i,j,k for in...

網路流24題 CTSC1999 家園

地球和月球中間有 n n 個太空站,有 m role presentation m m艘太空船,k k 個人要從地球前往月球。已知每個太空站可以容納無限多的人,每艘太空船的承載人數為 hi role presentation hih i,以及它們的行駛路線 經過的每乙個太空站編號 任意兩個太空站之間...