记录编号 431155 评测结果 AAAAAAAAAA
题目名称 运输问题4 最终得分 100
用户昵称 GravatarHzoi_QTY 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-07-31 11:15:30 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<queue>
#define inf 100000000
using namespace std;
int n,f[105][105],l[105][105],S,T;
int adj[10005],e=2,flag[10005],dis[10005],from[10005];
struct node
{
	int v,next,l,f;
} a[100000];
void add(int u,int v,int l,int f)
{
	a[e].v=v;a[e].next=adj[u];a[e].l=l;a[e].f=f;adj[u]=e++;
}
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 bfs()
{
	for(int i=S+1;i<=T;i++)
	    dis[i]=inf;
	queue<int> q;
	q.push(S);
	flag[S]=1;
	while(!q.empty())
	{
		int x=q.front();q.pop();flag[x]=0;
		for(int i=adj[x];i;i=a[i].next)
		{
			int to=a[i].v;
			 if(a[i].l&&dis[to]>dis[x]+a[i].f)
			 {
			 	dis[to]=dis[x]+a[i].f;
			 	if(!flag[to])
			 	{
			 		flag[to]=1;
			 		q.push(to);
				}
				from[to]=i;
			 }
		}
	}
	if(dis[T]==inf)return 0;
	return dis[T];
}
int work()
{
	int p=T,f=inf;
	while(p!=S)
	{
		f=min(f,a[from[p]].l);
		p=a[from[p]^1].v;
	}
	p=T;
	while(p!=S)
	{
		a[from[p]].l-=f;
		a[from[p]^1].l+=f;
		p=a[from[p]^1].v;
	}
	return f;
}
int yjn()
{
	freopen("maxflowd.in","r",stdin);
	freopen("maxflowd.out","w",stdout);
	n=read();
	S=read();T=read();
	for(int i=1;i<=n;i++)
	   for(int j=1;j<=n;j++)
	   {
	   	     l[i][j]=read();
	   	     f[i][j]=read();
	   	     if(l[i][j])
	   	        add(i,j,l[i][j],f[i][j]),add(j,i,0,-f[i][j]);
	   }
	int ans=0,l;
	while(l=bfs())
	   ans+=work()*l;
	cout<<ans;   
}
int qty=yjn();
int main(){;}