Pagini recente » Cod sursa (job #895) | Monitorul de evaluare | Cod sursa (job #129877) | Cod sursa (job #1446984) | Cod sursa (job #2366780)
#include<bits/stdc++.h>
using namespace std;
deque<int> q;
const int maxN=1005;
bool seen[maxN];
vector<int> v[maxN];
int c[maxN][maxN],f[maxN][maxN];
int T[maxN],n,m,x,y,z;
inline bool bfs()
{
q.push_back(1);
memset(seen,0,sizeof(seen));
seen[1]=1;
while(!q.empty())
{
int nod=q.front();
q.pop_front();
for(auto it:v[nod])
{
if(!seen[it] && c[nod][it]>f[nod][it])
{
T[it]=nod;
seen[it]=1;
q.push_back(it);
}
}
}
return seen[n];
}
int sol;
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
c[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
while(bfs())
{
for(auto it:v[n])
{
int flow=c[it][n]-f[it][n];
for(int z=it;z!=1;z=T[z])
flow=min(flow,c[T[z]][z]-f[T[z]][z]);
for(int z=it;z!=1;z=T[z])
{
f[T[z]][z]+=flow;
f[z][T[z]]-=flow;
}
sol+=flow;
}
}
printf("%d\n",sol);
return 0;
}