记录编号 149086 评测结果 AAAAAAAAAAAA
题目名称 草地排水 最终得分 100
用户昵称 Gravatarnew ioer 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2015-02-18 16:15:25 内存使用 0.30 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
const int inf=0x3f3f3f3f;
int n,m,ans,len=1,g[201],d[201],q[201],to[405],cap[405],next[405];
bool bfs(){
	int l=1,r=1;
	memset(d,0,sizeof d),d[1]=1,q[1]=1;
	while(l<=r){
		int x=q[l++];
		for(int i=g[x];i;i=next[i])
			if(!d[to[i]]&&cap[i]) 
				q[++r]=to[i],d[to[i]]=d[x]+1; 
	}
	return d[n];
}
int dfs(int x,int y){
	if(x==n||!y) return y;int flow=0;
	for(int i=g[x];i;i=next[i]){
		if(!cap[i]||d[to[i]]!=d[x]+1) continue;
		int f=dfs(to[i],std::min(y,cap[i]));
		flow+=f,y-=f,cap[i]-=f,cap[i^1]+=f;
		if(!y) break;
	}
	return flow;
}
int main(){
	freopen("ditch.in","r",stdin);
	freopen("ditch.out","w",stdout);
	scanf("%d%d",&m,&n);
	for(int x,y,z;m--;){
		scanf("%d%d%d",&x,&y,&z);
		to[++len]=y,next[len]=g[x],cap[len]=z,g[x]=len;
		to[++len]=x,next[len]=g[y],cap[len]=0,g[y]=len;
	}
	while(bfs()) ans+=dfs(1,inf);
	printf("%d",ans);
}