Pagini recente » Cod sursa (job #3193509) | Cod sursa (job #2627679) | Cod sursa (job #1969624) | Cod sursa (job #1121032) | Cod sursa (job #2406248)
#include <bits/stdc++.h>
#define N 1005
using namespace std;
ifstream fin("maxflow.in") ;
ofstream fout("maxflow.out") ;
vector<int> graf[N] ;
int cap[N][N] , flux[N][N] ;
bool viz[N] ;
int n , m , tt[N];
vector<int> nvec;
void citire()
{
int i , x , y , z;
fin >> n >> m ;
for ( i = 1 ; i <= m ; i++ )
{
fin >> x >> y >> z ;
graf[x].push_back(y) ;
graf[y].push_back(x) ;
cap[x][y] = z ;
}
}
bool bfs()
{
int nod ;
queue<int> Q;
memset(viz,false,N-3) ;
Q.push(1) ;
viz[1] = true ;
while (!Q.empty())
{
nod = Q.front() ;
Q.pop() ;
if ( nod == n )
continue ;
for ( auto vec : graf[nod] )
{
if ( viz[vec] || cap[nod][vec] == flux[nod][vec] )
continue ;
Q.push(vec) ;
viz[vec] = true ;
tt[vec] = nod ;
}
}
return viz[n];
}
int main()
{
int i , fmin , sol=0;
citire() ;
while (bfs())
{
for ( auto vec : graf[n] )
{
if ( viz[vec] == false || cap[vec][n] == flux[vec][n] )
continue ;
tt[n] = vec;
fmin = 0x3f3f3f3f ;
for ( i = n ; i != 1 ; i = tt[i] )
fmin = min(fmin,cap[tt[i]][i]-flux[tt[i]][i]) ;
if ( fmin == 0 )
continue ;
for ( i = n ; i != 1 ; i = tt[i] )
flux[tt[i]][i] = flux[tt[i]][i] + fmin , flux[i][tt[i]] = flux[i][tt[i]] - fmin ;
sol = sol + fmin ;
}
}
fout << sol ;
}