Pagini recente » Cod sursa (job #1862898) | Cod sursa (job #453095) | Rating onu stefania (stefania_02) | Cod sursa (job #1298967) | Cod sursa (job #718942)
Cod sursa(job #718942)
#include<stdio.h>
#include<vector>
#define maxn 1005
#define pb push_back
#define S 1
#define D n
#define INF (1<<29)
using namespace std;
FILE*f=fopen("maxflow.in","r");
FILE*g=fopen("maxflow.out","w");
int n,m;
int Cp[maxn][maxn],F[maxn][maxn];
int C[maxn],T[maxn],viz[maxn];
vector<int>G[maxn];
inline void citire () {
fscanf(f,"%d %d",&n,&m);
int x,y,c;
for ( int i = 1 ; i <= m ; ++i ){
fscanf(f,"%d %d %d",&x,&y,&c);
G[x].pb(y);
G[y].pb(x);
Cp[x][y] = c;
}
}
inline bool bfs () {
int nod,nodvcn,found = 0;
for ( int i = 1 ; i <= n ; ++i ){
viz[i] = 0;
}
int p = 1,u = 0;
C[++u] = S; viz[S] = 1;
while ( p <= u ){
nod = C[p];
for ( vector<int>::iterator itt = G[nod].begin() ; itt != G[nod].end() ; ++itt ){
nodvcn = (*itt);
if ( !viz[nodvcn] && Cp[nod][nodvcn] > F[nod][nodvcn] ){
if ( nodvcn == D ){
found = 1; continue ;
}
C[++u] = nodvcn; viz[nodvcn] = 1;
T[nodvcn] = nod;
}
}
++p;
}
return found;
}
inline int maxflow () {
int flux = 0,nod,nodvcn,minim;
while ( bfs() ){
for ( vector<int>::iterator itt = G[D].begin() ; itt != G[D].end() ; ++itt ){
nodvcn = (*itt); T[D] = nodvcn;
minim = INF;
for ( nod = D ; T[nod] ; nod = T[nod] ){
minim = min(minim,Cp[T[nod]][nod]-F[T[nod]][nod]);
}
for ( nod = D ; T[nod] ; nod = T[nod] ){
F[T[nod]][nod] += minim;
F[nod][T[nod]] -= minim;
}
flux += minim;
}
}
return flux;
}
int main () {
citire();
fprintf(g,"%d\n",maxflow());
fclose(f);
fclose(g);
return 0;
}