Pagini recente » Cod sursa (job #2622412) | Cod sursa (job #1997970) | Cod sursa (job #1472270) | Cod sursa (job #454151) | Cod sursa (job #2187468)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int m,n,f,flux[1005][1005],capacitate[1005][1005],viz[1005];
vector <int> G[1005];
void dfs(int nod)
{
if(nod==n)
memset(viz,1,sizeof(viz));
viz[nod]=1;
for(auto fiu:G[nod])
{
if(capacitate[nod][fiu]>flux[nod][fiu]&&!viz[fiu])
{
//printf("%d -> %d %d %d\n",nod,fiu,capacitate[nod][fiu],flux[nod][fiu]);
f=min(f,capacitate[nod][fiu]-flux[nod][fiu]);
dfs(fiu);
flux[nod][fiu]+=f;
flux[fiu][nod]-=f;
}
}
}
void printmuchii()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
if(capacitate[i][j])
printf("%d -> %d %d %d\n",i,j,capacitate[i][j],flux[i][j]);
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
int nod1,nod2,c;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&nod1,&nod2,&c);
G[nod1].push_back(nod2);
G[nod2].push_back(nod1);
capacitate[nod1][nod2]=c;
}
for(int i=1; i<=n; i++)
{
f=0x3f3f3f;
memset(viz,0,sizeof(viz));
dfs(1);
}
int rasp=0;
for(auto fiu:G[1])
rasp+=flux[1][fiu];
printf("%d",rasp);
return 0;
}