Pagini recente » Cod sursa (job #1612427) | Cod sursa (job #2253469) | Cod sursa (job #476690) | Cod sursa (job #2227246) | Cod sursa (job #2164614)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
struct str{
int nod,retea;
};
int maxnu(int a,int b)
{
if(a>b)
return b;
return a;
}
vector <str> v[10000];
int mi,viz[10000],tot=0,n;
int minimul[10002];
void dfs(int st)
{
viz[st]=1;
for(int i=0;i<v[st].size();i++)
{
if(viz[v[st][i].nod]==0 && v[st][i].retea>0)
{
minimul[v[st][i].nod]=maxnu(v[st][i].retea,minimul[st]);
if(v[st][i].nod==n)
{
viz[n]=1;
return;
}
dfs(v[st][i].nod);
}
if(viz[n]==1)
return;
}
}
void cd(int st)
{
viz[st]=0;
for(int i=0;i<v[st].size();i++)
{
if(viz[v[st][i].nod]==1)
{
v[st][i].retea=v[st][i].retea-mi;
cd(v[st][i].nod);
}
}
}
/*void cd1(int st)
{
viz[st]=0;
for(int i=0;i<v[st].size();i++)
{
if(viz[v[st][i].nod]==1)
{
cd1(v[st][i].nod);
}
}
}*/
int main()
{
int x,i,c,y,m;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
if(x!=y)
v[x].push_back({y,c});
}
for(i=1;i<=n;i++)
minimul[i]=10000;
mi=0;
while(mi!=10000)
{
mi=10000;
minimul[1]=10000;
dfs(1);
mi=minimul[n];
cd(1);
for(i=1;i<=n;i++)
{
minimul[i]=10000;
}
if(mi!=10000)
tot=tot+mi;
}
g<<tot;
return 0;
}