记录编号 430129 评测结果 AAAAAAAAAA
题目名称 运输问题1 最终得分 100
用户昵称 GravatarBaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-07-29 14:28:05 内存使用 0.00 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
#define qq 1e9
int read() {
	int s=0,f=1;
	char ch=getchar();
	while(ch>'9'||ch<'0') {
		if(ch=='-') {
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') {
		s=(s<<1)+(s<<3)+(ch^48);
		ch=getchar();
	}
	return s*f;
}
int n,r[105],tot,deep[105];
int head,tail,queue[105];
struct oo {
	int to,vv,next;
} c[10005];
void add(int x,int y,int z) {
	c[tot].to=y;
	c[tot].next=r[x];
	c[tot].vv=z;
	r[x]=tot++;
}
bool bfs(int s,int t) {
	memset(deep,0,sizeof(deep));
	head=tail=0;
	queue[++tail]=s;
	deep[s]=1;
	while(head<tail) {
		int opt=queue[++head];
		for(int i=r[opt]; ~i; i=c[i].next) {
			if(c[i].vv&&!deep[c[i].to]) {
				deep[c[i].to]=deep[opt]+1;
				queue[++tail]=c[i].to;
				if(c[i].to==t) {
					return 1;
				}
			}
		}
	}
	return 0;
}
int dfs(int opt,int fw) {
	if(opt==n) {
		return fw;
	}
	int tmp=fw,k;
	for(int i=r[opt]; ~i; i=c[i].next) {
		if(c[i].vv&&tmp&&deep[c[i].to]==deep[opt]+1) {
			k=dfs(c[i].to,min(c[i].vv,tmp));
			if(!k) {
				deep[c[i].to]=0;
				continue;
			}
			c[i].vv-=k;
			c[i^1].vv+=k;
			tmp-=k;
		}
	}
	return fw-tmp;
}
int dicnic(int s,int t){
	int ans=0;
	while(bfs(s,t)){
		ans+=dfs(s,qq);
	}
	return ans;
}
int Main(){
	freopen("maxflowa.in","r",stdin);
	freopen("maxflowa.out","w",stdout);
	n=read();
	memset(r,-1,sizeof(r));
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=n; j++) {
			int x=read();
			if(x) {
				add(i,j,x);
				add(j,i,0);
			}
		}
	}
	int ans=dicnic(1,n);
	printf("%d\n",ans);
	return 0;
}
int hehe=Main();
int main() {
	;
}