记录编号 52080 评测结果 AAAAAAAAAA
题目名称 运输问题1 最终得分 100
用户昵称 GravatarQhelDIV 是否通过 通过
代码语言 C++ 运行时间 0.046 s
提交时间 2013-01-12 15:04:35 内存使用 5.48 MiB
显示代码纯文本
#include <fstream>
using namespace std;
ifstream fin("maxflowa.in");
ofstream fout("maxflowa.out");
int N,h[1000],e[1000],Map[1000][1000],r[1000][1000];
bool Inqueue[10000];
class Queue
{
public:
	int head,tail,list[10000];
}Q;
void Initialize()
{
int i,j;
	fin>>N;
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
		{
			fin>>Map[i][j];
			r[i][j]=Map[i][j];
		}
}

void PfR()
{
int i;
	h[1]=N;h[N]=0;Q.head=1;Q.tail=1;
	for(i=2;i<=N;i++)
		if(Map[1][i])
		{
			e[i]+=Map[1][i];
			r[1][i]-=Map[1][i];
			e[1]-=Map[1][i];
			r[i][1]+=Map[1][i];
			if(i!=N)
			{
				Q.list[Q.tail++]=i;
				Inqueue[i]=true;
			}
		}
	while(Q.head<Q.tail)
	{
	bool flag=false;
		for(i=1;i<=N;i++)
			if(r[Q.list[Q.head]][i] && h[Q.list[Q.head]]==h[i]+1)
			{
			int X=min(e[Q.list[Q.head]],r[Q.list[Q.head]][i]);
				r[Q.list[Q.head]][i]-=X;
				r[i][Q.list[Q.head]]+=X;
				e[Q.list[Q.head]]-=X;
				e[i]+=X;
				flag=true;
				if(!Inqueue[i] && i!=N)
				{
					Inqueue[i]=true;
					Q.list[Q.tail++]=i;
				}
				if(!e[Q.list[Q.head]])
					break;
			}
		if(e[Q.list[Q.head]]>0)
		{
		int Min=100000000;
			for(i=1;i<=N;i++)
				if(r[Q.list[Q.head]][i])
					Min=min(Min,h[i]);
			h[Q.list[Q.head]]=Min+1;
			Q.head--;
		}
		Inqueue[Q.list[Q.head]]=false;
		Q.head++;
	}
	fout<<e[N]<<endl;
}

int main()
{
	Initialize();
	
	PfR();
	
	fin.close();
	fout.close();
	return 0;
}