Pagini recente » Cod sursa (job #2883519) | Cod sursa (job #2411184) | Cod sursa (job #2532602) | Cod sursa (job #1413227) | Cod sursa (job #300859)
Cod sursa(job #300859)
#include<cstdio>
#include<cstring>
#include<vector>
#define NMAX 1001
#define UNLIMITED 0x3f3f3f3f
using namespace std;
char buf[64],*p;
int get()
{
int t = 0;
for (; *p>='0' && *p<='9';++p)
t = t*10+ *p-'0';
for (; *p == ' '; ++p);
return t;
}
int parent[NMAX],viz[NMAX],coada[NMAX],FFlow[NMAX][NMAX],N,M,capac[NMAX][NMAX];
vector<int> Graf[NMAX];
inline int minim(int a, int b)
{return (a<b)?a:b;}
int BF()
{
int current, j, varf;
memset(viz,0,sizeof(viz));
viz[1]=1;
coada[1]=1;
for (int p=1,u=1;p<=u; ++p)
{
current = coada[p];
for (j = 0; j < Graf[current].size(); ++j)
{
varf = Graf[current][j];
if (capac[current][varf] == FFlow[current][varf] || viz[varf])continue;
viz[varf] = 1;
parent[varf] = current;
coada[++u] = varf;
if (varf == N) return 1;
}
}
return 0;
}
int getflow()
{
int i,Fmin,Cflow;
for (Cflow = 0; BF(); Cflow += Fmin)
{
Fmin = UNLIMITED;
for (i = N; i != 1; i = parent[i])
Fmin = minim(Fmin, capac[parent[i]][i] - FFlow[parent[i]][i]);
for (i = N; i != 1; i = parent[i])
FFlow[parent[i]][i] +=Fmin;
FFlow[i][parent[i]] -=Fmin;
}
return Cflow;
}
int main()
{
int x,y,i;
FILE *f = fopen("maxflow.in","r");
fscanf(f,"%d %d\n",&N,&M);
for (i = 1; i <= M; ++i)
{
fgets(buf,sizeof(buf),f);p=buf;
x = get();
y = get();
capac[x][y] = get();
Graf[x].push_back(y);
Graf[y].push_back(x);
}
fclose(f);
int fluxmax = getflow();
FILE *g = fopen("maxflow.out","w");
fprintf(g,"%d\n",fluxmax);
fclose(g);
return 0;
}