| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
找到了,但不知道为什么,以下是改过的代码,只是加了flow[MAXN][MAXN],v[maxn]两个数组In Reply To:求救,TLE了,在discuss上一个差不多的模板过了 Posted by:zl_leaf at 2012-04-19 13:55:50
#include<iostream>
#include<memory.h>
#include<queue>
#include<cstdio>
#include <cmath>
using namespace std;
#define MAXN 110
#define INF 999999999
int n,np,nc,m;
int cap[MAXN][MAXN],flow[MAXN][MAXN],father[MAXN],v[MAXN],res;
int start,end;
queue<int>q;
void maxflow()
{
int x,i;
while(1)
{
for(i=0;i<=end;i++)
{
v[i]=0;
father[i]=-1;
}
q.push(start);
v[start]=INF;
while(!q.empty())
{
x=q.front();
q.pop();
for(i=0;i<=end;i++)
{
if(father[i]==-1&&cap[x][i]>flow[x][i])
{
father[i]=x;
v[i]=v[x]<cap[x][i]-flow[x][i]?v[x]:cap[x][i]-flow[x][i];
q.push(i);
}
}
}
if(!v[end]) break;
for(i=end;i!=0;i=father[i])
{
flow[father[i]][i]+=v[end];
flow[i][father[i]]-=v[end];
}
res+=v[end];
}
return ;
}
int main()
{
int i,j,a,b,c;
char s[30];
while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF)
{
start=0;
end=n+1;
for(i=0;i<=end;i++)
for(j=0;j<=end;j++)
{
cap[i][j]=0;
flow[i][j]=0;
}
for(i=0;i<m;i++)
{
scanf("%s",s);
sscanf(s,"(%d,%d)%d",&a,&b,&c);
cap[a+1][b+1]+=c;
}
for(i=0;i<np;i++)
{
scanf("%s",s);
sscanf(s,"(%d)%d",&a,&b);
cap[start][a+1]+=b;
}
for(i=0;i<nc;i++)
{
scanf("%s",s);
sscanf(s,"(%d)%d",&a,&b);
cap[a+1][end]+=b;
}
res=0;
maxflow();
printf("%d\n",res);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator