Pagini recente » Cod sursa (job #2798301) | Cod sursa (job #3287313) | Cod sursa (job #2835118) | Cod sursa (job #2792039) | Cod sursa (job #759775)
Cod sursa(job #759775)
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
const int N=1005;
const int inf=0x3f3f3f3f;
int c[N][N],f[N][N],minim,n,m;
int pred[N];
bool use[N];
vector <int> a[N];
bool bfs(int s)
{
int x;
minim=inf;
memset(use,false,sizeof(use));
memset(pred,0,sizeof(pred));
queue <int> q;
q.push(s);
use[s]=true;
while(!q.empty())
{
x=q.front();
q.pop();
for(vector<int> :: iterator i=a[x].begin();i!=a[x].end();i++)
{
if(!use[*i] && (c[x][*i]-f[x][*i]!=0))
{
use[*i]=true;
if(c[x][*i]-f[x][*i]<minim)
minim=c[x][*i]-f[x][*i];
pred[*i]=x;
q.push(*i);
if(*i==n)
return true;
}
}
}
return false;
}
int main()
{
int flux,x,y,cst;
in>>n>>m;
while(m--)
{
in>>x>>y>>cst;
a[x].push_back(y);
c[x][y]=cst;
}
flux=0;
while(bfs(1))
{
x=n;
flux+=minim;
while(pred[x])
{
f[pred[x]][x]+=minim;
f[x][pred[x]]-=minim;
x=pred[x];
}
}
out<<flux;
return 0;
}