Pagini recente » Cod sursa (job #2878713) | Cod sursa (job #3246384) | Cod sursa (job #2289440) | Cod sursa (job #2792656) | Cod sursa (job #2181685)
#include<iostream>
#include<fstream>
using namespace std;
int cost[401][401]={},viz[401]={},cost2[401][401]={},tata[401];
void BF(int p,int n)
{
int i,ok,j,min;
if(p==n)
{
min=2000000000;
j=p;
while(tata[j]!=0)
{
if(cost[tata[j]][j]-cost2[tata[j]][j]<min)
{
min=cost[tata[j]][j]-cost2[tata[j]][j];
}
j=tata[j];
}
j=p;
while(tata[j]!=0)
{
cost2[tata[j]][j]+=min;
j=tata[j];
}
viz[p]=0;
}
else
{
for(i=1;i<=n;i++)
{
if(viz[i]==0&&cost[p][i]!=0)
{
viz[i]=1;
tata[i]=p;
BF(i,n);
}
}
viz[p]=0;
}
}
int main()
{
int a,b,c,i,m,n,flux=0;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
cost[a][b]=c;
}
viz[1]=1;
tata[1]=0;
BF(1,n);
for(i=1;i<=n;i++)
{
if(cost2[1][i]!=0)
{
flux+=cost2[1][i];
}
}
g<<flux;
f.close();
g.close();
}