Pagini recente » Cod sursa (job #2605601) | Cod sursa (job #2966001) | Borderou de evaluare (job #1505890) | Cod sursa (job #2966551) | Cod sursa (job #2602723)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
struct drum
{
int y, maxflow, flow;
drum(int y, int maxflow)
{
this->y=y;
this->maxflow=maxflow;
this->flow=0;
}
};
struct nodS
{
vector <drum> vecini;
bool viz;
};
int n,m,i,x,y,c,flux;
nodS nod[1005];
pair <bool, int> ans;
pair <bool, int> dfs(int poz, int mini)
{
nod[poz].viz=true;
if(poz==n)
return {true, mini};
for(drum &it : nod[poz].vecini)
{
if(!nod[it.y].viz && it.flow<it.maxflow)
{
auto ans=dfs(it.y, min(mini, it.maxflow-it.flow));
if(ans.f)
{
it.flow+=ans.s;
return ans;
}
}
}
return {false, 0};
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
nod[x].vecini.push_back(drum(y, c));
}
while(true)
{
for(i=1;i<=n;i++)
nod[i].viz=false;
ans = dfs(1, 110001);
if(!ans.f)
break;
else
flux+=ans.s;
}
fout<<flux;
return 0;
}