Pagini recente » Cod sursa (job #2304143) | Cod sursa (job #2756286) | Cod sursa (job #2730771) | Cod sursa (job #2980300) | Cod sursa (job #2686323)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
const int dim=1e3+10;
const int inf=2e9;
typedef long long ll;
typedef pair<int,int> pi;
int t,n,m,a,b,c,ans;
vector < vector < int > > C(dim,vector < int > (dim,0));
vector < int > V[dim],viz(dim,0),T(dim,0);
void init()
{
for(int i=1;i<=n;i++)
viz[i]=0,
T[i]=0;
}
bool BFS()
{
queue < int > qu;
qu.push(1);
viz[1]=1;
bool ok=0;
while(!qu.empty())
{
int nod=qu.front();
qu.pop();
viz[nod]=2;
for(unsigned int vecin:V[nod])
if(!viz[vecin] && C[nod][vecin] > 0)
{
ok=1;
T[vecin]=nod;
qu.push(vecin);
}
}
return ok;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b>>c;
V[a].pb(b);
V[b].pb(a);
C[a][b]=c;
}
while(BFS())
{
for(unsigned int x:V[n])
{
T[n]=x;
if(viz[x]==2 && C[x][n]>0)
{
int minim=inf;
int y=n;
while(T[y]!=0)
{
minim=min(minim,C[T[y]][y]);
y=T[y];
}
y=n;
while(T[y]!=0)
{
C[T[y]][y]-=minim;
C[y][T[y]]+=minim;
y=T[y];
}
ans+=minim;
}
}
init();
}
g<<ans<<'\n';
return 0;
}