Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

样例都过了,为什么还没A?!!

Posted by guowentian at 2012-07-17 19:33:54 on Problem 3436
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define INF 99999999
int n,p,f;
int flow[55][55];
int map[55][55];
int input[55][12];
int output[55][12];///1-n node ,0 source ,n destination
int perf[55];
int a[55];
int q[55];
int pre[55];
int min(int a,int b)
{ return a<b?a:b;}

bool bfs()
{
	memset(a,0,sizeof(a));
	memset(q,0,sizeof(q));
	memset(pre,0,sizeof(pre));
	int head,tail;
	head=tail=0;
	q[tail++]=0;
	a[0]=INF;
	while(head<tail)
	{
		int u=q[head++];
		for(int v=0;v<=n+1;++v)
			if(!a[v]&&map[u][v]>flow[u][v])
			{
				a[v]=min(a[u],map[u][v]-flow[u][v]);
				pre[v]=u;
				if(v==n+1) 
					return true;
				
				q[tail++]=v;
				
			}
	}
	return false;
}

void maxflow()
{
	while(bfs())
	{
		for(int u=n+1;u!=0;u=pre[u])
		{
			flow[pre[u]][u]+=a[n+1];
			flow[u][pre[u]]-=a[n+1];
		}
		f+=a[n+1];
	}
}

int main ()
{
	while(scanf("%d%d",&p,&n)!=EOF)
	{
		f=0;
		memset(input,0,sizeof(input));
		memset(output,0,sizeof(output));
		memset(map,0,sizeof(map));
		memset(flow,0,sizeof(flow));
		// initialize
		for(int i=1;i<=n;++i)
		{
			scanf("%d",&perf[i]);
			for(int j=1;j<=p;++j)  //jth part input
			     scanf("%d",&input[i][j]);
			for(int j=1;j<=p;++j)
				scanf("%d",&output[i][j]); // jth part output
		}
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)/// jth output to ith
			{
				if(i==j) continue;
				bool flag=true;
				for(int k=1;k<=p;++k)
					if(input[i][k]!=2&&input[i][k]!=output[j][k])
					{flag=false;break;}
				if(flag)//create edge
				{
					map[j][i]=min(perf[j],perf[i]);
				}
			}
			
		for(int i=1;i<=n;++i)
			{
				bool flag=true;
				for(int k=1;k<=p;++k)
					if(input[i][k]==1)
					flag=false;
				if(flag) map[0][i]=perf[i]; //0 2 true
		    }
		for(int i=1;i<=n;++i)
		{
			bool flag=true;
			for(int k=1;k<=p;++k)
				if(output[i][k]==0)
					flag=false;
			if(flag) map[i][n+1]=perf[i];
		}
		maxflow();
		int num=0;
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				if(flow[i][j]&&map[i][j])
					num++;
		printf("%d %d\n",f,num);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				if(flow[i][j]&&map[i][j])
				{
					printf("%d %d %d\n",i,j,flow[i][j]);
				}
		
	}
  system("pause");
  return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator