| ||||||||||
| 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 | |||||||||
虚心求教!!!! 为何我的代码TLE!!!!#include <iostream>
#include <string>
using namespace std;
#define MAX_N 200+5
#define MAX_VALUE 11000
char temp[MAX_N];
int f[MAX_N][MAX_N];
int c[MAX_N][MAX_N];
int pre[MAX_N];
int Q[MAX_N*MAX_N];
int E_K( int a , int b ){
int sum = 0;
while( true ){
int i , head , tail , min = MAX_VALUE;
memset( pre , 0 , sizeof(pre) );
head = tail = 0;
Q[tail++] = a;
pre[a] = 1;
while( head < tail ){
i = Q[head++];
for( int j = 1 ; j <= b ; j++ ){
if( pre[j] == 0 ){
int value = c[i][j] - f[i][j];
if( value > 0 ){
min = min < value ? min : value;
pre[j] = i;
Q[tail++] = j;
}else if( f[j][i] > 0 ){
min = min < f[j][i] ? min : f[j][i];
pre[j] = -i;
Q[tail++] = j;
}
}
}
}
if( pre[b] == 0 ){
break;
}
int l , k = b;
while( k != a ){
if( pre[k] > 0 ){
l = pre[k];
f[l][k] += min;
}else{
l = abs( pre[k] );
f[k][l] -= min;
}
k = l;
}
sum += min;
}
return sum;
}
int main()
{
freopen( "in.txt" , "r" , stdin );
int n , np , nc , m , a , b , value , sum;
while( scanf("%d%d%d%d",&n,&np,&nc,&m) != EOF ){
int h = n;
memset( c , 0 , sizeof(c) );
memset( f , 0 , sizeof(f) );
while( m-- ){
scanf("%s",temp);
sscanf(temp,"(%d,%d)%d",&a,&b,&value);
c[a+2][b+2] = value;
}
while( np-- ){
scanf("%s",temp);
sscanf(temp,"(%d)%d",&a,&value);
c[1][a+2] = value;
}
while( nc-- ){
scanf("%s",temp);
sscanf(temp,"(%d)%d",&a,&value);
c[a+2][h+2] = value;
}
sum = E_K( 1 , h+2 );
printf("%d\n",sum);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator