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

好棒,好棒,过了100道,而且是网络流的第一题。

Posted by tiaoer at 2012-08-29 20:38:26 on Problem 1459
//1459 Accepted 196K 329MS C++ 2160B 2012-08-29 20:33:59  
#include<stdio.h>
#include<string.h>
#define inf 100000000
int matrix[110][110];
int dui[110],vist[110],n,s,t,opt[110];
int bfs()
{
	//printf("linger3 ");
	int i,x;
	memset(vist,0,sizeof(vist));
	memset(opt,0,sizeof(opt));
	int front=0,rear=0;
    dui[rear]=s;
	opt[s]=0;
    vist[s]=1;
	front++;
	while(rear!=front)
	{
		x=dui[rear];
		rear++;
		for(i=0;i<=n+1;i++)
		{
		   if(matrix[x][i]>0&&vist[i]==0)
		   {
               vist[i]=1;
			   dui[front]=i;
			   opt[i]=opt[x]+1;
			   front++;
		   }
		}
	}
	if(vist[t]==1)
	{
		return 1;//广搜搜到了汇点,表示可以进行深搜
	}
	else
	{
		return 0;
	}
}
int lujing[110],min,flow;
void dfs(int x,int index)
{
//	printf("linger2 ");
	int i;
	lujing[index]=x;
	if(x==t)
	{
		min=inf;
		for(i=0;i<index;i++)
		{
			if(matrix[lujing[i]][lujing[i+1]]<min)
			{
				min=matrix[lujing[i]][lujing[i+1]];
			}
		}
        for(i=0;i<index;i++)
		{
			matrix[lujing[i]][lujing[i+1]]=matrix[lujing[i]][lujing[i+1]]-min;
			matrix[lujing[i+1]][lujing[i]]=matrix[lujing[i+1]][lujing[i]]-(-min);
		}
		flow=flow+min;
		return ;
	}
    for(i=0;i<=n+1;i++)
	{
		if(matrix[x][i]>0&&opt[x]==opt[i]-1)
		{
			dfs(i,index+1);
		}
	}
	return ;
}
int dicnic()
{
	//printf("linger1\n");
	int f=0,zong;
	zong=0;
	while(bfs())
	{
		//printf("linger4");
		flow=0;
		min=inf;
		dfs(s,0);
		zong=zong+flow;
	}
	return zong;
}
int main()
{
    int m,np,nc,d1,d2,d3,i,j;
	for(;scanf("%d%d%d%d ",&n,&np,&nc,&m)!=EOF;)
	{
        memset(matrix,0,sizeof(matrix));
		s=n;
		t=n+1;
	   for(i=0;i<m;i++)
	   {
		   scanf("(%d,%d)%d ",&d1,&d2,&d3);
		   matrix[d1][d2]=d3;
	   }
	   for(i=0;i<np;i++)
	   {
		   scanf("(%d)%d ",&d1,&d2);
		   matrix[s][d1]=d2;
	   }
	   for(i=0;i<nc;i++)
	   {
		   if(i<nc-1)
		   {
		        scanf("(%d)%d ",&d1,&d2);
		   }
		   else
		   {
                scanf("(%d)%d",&d1,&d2);
		   }
		   matrix[d1][t]=d2;
	   }
	   /*for(i=0;i<=n+1;i++)
	   {
		   for(j=0;j<=n+1;j++)
		   {
			   printf("%d ",matrix[i][j]);
		   }
		   printf("\n");
	   }*/
       printf("%d\n",dicnic());
	}
	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