題目:洛谷p2754。
題目大意:
有$n$個空間站,$m$個飛船,每個飛船有各自的停靠站點,並且從第乙個停靠站點開始,不斷迴圈。每個飛船有不同的容量(-1為月球,0為地球)。每個飛船初始停在第乙個停靠站上,每過1s就會到下乙個停靠站。
在空間站上的人可以選擇上飛船,也可以選擇不上飛船。
現在有$k$個人要從地球到月球去,問至少要過多少秒(無解輸出$0$)。
解題思路:
由於每一時刻狀態都是不同的,而資料規模比較小,可以考慮網路流建分層圖。
列舉答案,每次從源點向當前狀態的地球連一條容量inf的邊,從當前狀態向下一狀態連一條容量為inf的邊(人可以站在空間站而不一定要上船)。
再對每個飛船,從當前狀態停靠站向下一狀態的下一停靠站連一條容量為飛船容量的邊。
然後每次加完邊,都在原來的殘量網路上跑網路流,並累計流量。當某一次得到的流量大於等於$k$時,輸出答案即可。
無解的情況,只需要定乙個答案上界(如1000),當超過上界時就判為無解,輸出0即可。
c++ code:
#include#define moon 23333struct edgee[5000000];
inline int readint()
int n,m,k,head[100000],cnt=1,iter[100000],level[100000],flow=0;
inline void addedge(int u,int v,int flow);
head[u]=cnt;
e[++cnt]=(edge);
head[v]=cnt;
}struct boatp[100];
std::queueq;
void bfs() }}
int dfs(int u,int t,int f)
} }return 0;
}void dinic()
}int main()
std::cout.tie(0);
for(int ans=1;ans<=1000;++ans)
dinic();
if(flow>=k)
} std::cout<<0;
return 0;
}
CTSC1999 網路流24題 星際轉移
由於人類對自然資源的消耗,人們意識到大約在2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未知的原因,地球環境發生了連鎖崩潰,人類必須在最短的時間內遷往月球。現有n個太空站 位於地球與月球之間,且有m 艘公共運輸太空船在其間來回...
CTSC1999 網路流24題 星際轉移
輸入檔案 home.in輸出檔案 home.out簡單對比 時間限制 1 s 記憶體限制 128 mb 由於人類對自然資源的消耗,人們意識到大約在2300 年之後,地球就不能再居住了。於是在月球上建立了新的綠地,以便在需要時移民。令人意想不到的是,2177 年冬由於未 知的原因,地球環境發生了連鎖崩...
CTSC1999 網路流24題 補丁VS錯誤
題目 洛谷p2761 vijos p1019 codevs1239 codevs2218。題目大意 有n個錯誤,m個不同的補丁。對於乙個補丁,有兩個不同的字串描述。具體如下 如果當前錯誤包含第乙個字串中 的所有錯誤,且不包含第乙個字串中 的所有錯誤,則可以用這個補丁。使用這個補丁將修復第二個字串中 ...