【線性規劃與網路流24題 13】星際轉移
time limit:10000ms memory limit:65536k
total submit:15 accepted:0
case time limit:1000ms
description
由於人類對自然資源的消耗,人們意識到大約在2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有n個太空站
位於地球與月球之間,且有m 艘公共運輸太空船在其間來回穿梭。每個太空站可容納無限多的人,而每艘太空船i 只可容納h[i]個人。每艘太空船將周期性地停靠一系列的太空站,
例如:(1,3,4)表示該太空船將周期性地停靠太空站134134134…。每一艘太空船從乙個太空站駛往任一太空站耗時均為1。人們只能在太空船停靠太空站(或月球、地球)時上、下船。初始時所有人全在地球上,太空船全在初始站。試設計乙個演算法,找出讓所有人盡快地全部轉移到月球上的運輸方案。
程式設計任務:
對於給定的太空船的資訊,找到讓所有人盡快地全部轉移到月球上的運輸方案。
input
第1行有3 個正整數n(太空站個數),m(太空船個數)和k(需要運送的地球上的人的個數)。其中 1<=m<=13, 1<=n<=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…等正點時刻才能上下太空船。
output
程式執行結束時,將全部人員安全轉移所需的時間輸出。如果問題無解,則輸出0。
sample input
2 2 1sample output1 3 0 1 2
1 3 1 2 –1
5source
感謝 wo_ai_wangyuan 放上資料
無解很好判斷,乙個dfs就可以搞定
接下來我們考慮構圖
方便起見,我們把每乙個太空站(包括地球月球)的編號加上乙個3,源點為0,匯點為1
首先開始的時候,我們將源點和地球連上一條容量為inf的邊,月球和匯點連上一條容量為inf的邊
然後順序列舉天數,對於第t天,將源點和連上一條容量inf的邊,將和匯點連上一條容量為inf的邊
然後對於每乙個太空船,如果它在第t-1天到達太空站a,在第t天到達太空站b,那麼將,連上一條容量為該太空船的最大容量的邊
對於每乙個太空站i,由於可以延時轉移且容量無限大,將和連上一條容量為inf的邊
然後就求最大流,記住每一次求最大流都是在上一次求完之後的殘量網路上進行的
用sum來記錄當前求出的所有的最大流的和,如果sum>=k就說明所有人都從地球轉移到月球了,輸出此時的t
用sap要超時,所以用了劉汝佳提供的isap**,怕有重邊所以用的鄰接表
#include#include#include#include#define getid(xx,day) ((day)*(n+2)+(xx))
using namespace std;
const int maxn=1500,inf=1e9;
inline void _read(int &x)
for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';
if(!sign)x=-x;
}int n,m,k,last[maxn],h[60],cnt[60];
int ck[60][60],tot,op,ed,sum,end[maxn],last[maxn<<2],next[maxn<<2];
int dis[maxn],vd[maxn],earth=3,moon=2,cur;
bool vis[60];
struct wr
};
vectors;
void insert(int a,int b,int c)
void add(int x,int y)
bool find(int x)
int dfs(int x,int flow)
mind=min(mind,dis[y]);
}if(!sud)
return sud;
}void sap(){
memset(vd,0,sizeof(vd));
memset(dis,0,sizeof(dis));
vd[0]=tot;
while(dis[op]
星際轉移問題
由於人類對自然資源的消耗,人們意識到大約在 2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有 n 個太空站位於地球與月球之間,且有 m 艘公共運輸太空船在其...
星際轉移問題
s向地球連k的邊,每天每個地方由上一天連inf邊,每天月亮向t連邊 列舉天數獲取每天飛船的位置,由上一天的位置向這一天連滿載的邊 跑到人都送完位置,在合適的時候 玄學 break輸出無解 include include include include include define ll long l...
網路流 24 題 星際轉移
題目描述 由於人類對自然資源的消耗,人們意識到大約在 2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有 n n n 個太空站位於地球與月球之間,且有 m m...