Pagini recente » Cod sursa (job #992573) | Cod sursa (job #1742631) | Cod sursa (job #1711442) | Cod sursa (job #937027) | Cod sursa (job #2075822)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define MAX 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> v[1001];
int t[1001],c[1001][1001],f[1001][1001];
bool viz[1001];
void getAP(int x)//BFS prin care se obtine drumul de la x la n
{
int i,vec;
queue <int> q;
q.push(x);
viz[x]=1;
while(!q.empty())
{
x=q.front();q.pop();
for(i=0;i<v[x].size();i++)
{
vec=v[x][i];
if(viz[vec]==0 && c[x][vec]-f[x][vec]>0)
{
viz[vec]=1;
t[vec]=x;
q.push(vec);
}
}
}
}
int main()
{
int n,m,i,x,y,f1=0;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
fin>>c[x][y];
v[x].push_back(y);
v[y].push_back(x);
}
while(1)
{
memset(viz,0,sizeof(viz));
memset(t,-1,sizeof(t));
getAP(1);
if(t[n]==-1)
break;
int maxf=MAX;
i=n;
while(t[i]!=-1)
{
maxf=min(maxf,c[t[i]][i]-f[t[i]][i]);
i=t[i];
}
i=n;
while(t[i]!=-1)
{
f[t[i]][i]+=maxf;
f[i][t[i]]-=maxf;
i=t[i];
}
f1+=maxf;
}
fout<<f1;
return 0;
}