LG1343 地震逃生
阿新 • • 發佈:2018-11-07
ring while data add 同學 建模 stream str ret
題意
汶川地震發生時,四川**中學正在上課,一看地震發生,老師們立刻帶領x名學生逃跑,整個學校可以抽象地看成一個有向圖,圖中有n個點,m條邊。1號點為教室,n號點為安全地帶,每條邊都只能容納一定量的學生,超過樓就要倒塌,由於人數太多,校長決定讓同學們分成幾批逃生,只有第一批學生全部逃生完畢後,第二批學生才能從1號點出發逃生,現在請你幫校長算算,每批最多能運出多少個學生,x名學生分幾批才能運完。
\(x<2^{31},n \leq 200,m \leq 2000\)
分析
都不用建模了,直接跑網絡流就行了。
時間復雜度\(O(n^2 m)\)
代碼
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<set> #include<map> #include<queue> #include<vector> #include<algorithm> #include<string> #define co const template<class T>T read(T&x) { T data=0; int w=1; char ch=getchar(); while(!isdigit(ch)) { if(ch=='-') w=-1; ch=getchar(); } while(isdigit(ch)) { data=data*10+ch-'0'; ch=getchar(); } return x=data*w; } using namespace std; co int INF=0x3f3f3f3f; co int MAXN=250,MAXM=2050; int n,m; struct edge { int nx,to,c; }e[MAXM<<1]; int head[MAXN],ecnt; void addedge(int x,int y,int c) { e[++ecnt].to=y,e[ecnt].c=c; e[ecnt].nx=head[x],head[x]=ecnt; } queue<int>Q; int dep[MAXN],cur[MAXN]; bool bfs(int s,int t) { copy(head+1,head+n+1,cur+1); fill(dep+1,dep+n+1,INF); dep[s]=0; Q.push(s); while(Q.size()) { int x=Q.front(); Q.pop(); for(int i=head[x];i!=-1;i=e[i].nx) { int y=e[i].to,c=e[i].c; if(c>0&&dep[y]>dep[x]+1) { dep[y]=dep[x]+1; Q.push(y); } } } return dep[t]<INF; } int dfs(int x,int t,int lim) { if(x==t||!lim) return lim; int delta=0,inc; for(int i=cur[x];i!=-1;i=e[i].nx) { cur[x]=i; int y=e[i].to,c=e[i].c; if(dep[y]==dep[x]+1&&(inc=dfs(y,t,min(lim,c)))) { delta+=inc; lim-=inc; e[i].c-=inc; e[i^1].c+=inc; if(!lim) // edit 1 break; } } return delta; // edit 2 } int Dinic(int s,int t) { int res=0; while(bfs(s,t)) res+=dfs(s,t,INF); return res; } int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); int tot; read(n);read(m);read(tot); fill(head+1,head+n+1,-1); ecnt=-1; for(int i=1;i<=m;++i) { int x,y,c; read(x);read(y);read(c); addedge(x,y,c); addedge(y,x,0); } int ans=Dinic(1,n); if(ans==0) { puts("Orz Ni Jinan Saint Cow!"); } else { printf("%d %d\n",ans,tot/ans+bool(tot%ans)); } return 0; }
LG1343 地震逃生