Pagini recente » Cod sursa (job #1691142) | Cod sursa (job #2825901) | Cod sursa (job #147501) | Cod sursa (job #248542) | Cod sursa (job #599618)
Cod sursa(job #599618)
#include <fstream>
#include <cstring>
#include <queue>
#define X1 1001
using namespace std;
ifstream in;
ofstream out;
queue <int> q;
int G[X1][X1];
int use[X1],T[X1];
int N,drum=0;
inline void bf(int nod)
{
for(int i=1;i<=N;i++)
if(G[nod][i]>0)
if(!use[i])
{
use[i]=1;
T[i]=nod;
if(i==N)
{
drum=1;
return;
}
q.push(i);
}
if(!q.empty())
{
nod=q.front();
q.pop();
bf(nod);
}
}
int main()
{
int M,x,y,c,flux=0,min;
memset(G,0,sizeof(G));
in.open("maxflow.in");
in>>N>>M;
for(;M;--M)
{
in>>x>>y>>c;
G[x][y]=c;
while(!drum)
{
memset(T,0,sizeof(T));
memset(use,0,sizeof(use));
while(!q.empty()) q.pop();
use[1]=1;
bf(1);
if(!drum) break;
min=-1;
x=N;
while(x!=1)
{
if(min==-1||min>G[T[x]][x]) min=G[T[x]][x];
x=T[x];
}
x=N;
while(x!=1)
{
G[T[x]][x]-=min;
x=T[x];
}
flux+=min;
drum=0;
}
}
in.close();
out.open("maxflow.out");
out<<flux<<'\n';
out.close();
return 0;
}