Pagini recente » Cod sursa (job #2363912) | Cod sursa (job #213832) | Cod sursa (job #1625146) | Cod sursa (job #2439238) | Cod sursa (job #1124298)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
// problema OJI 2012 OZN
int n,k,i,x1,y1,x2,y2,x,j,nr;
int viz[1005],inainte[1005],a,b,c,t,min1;
int cap[1005][1005],flux[1005][1005],fluxmax,fx;
vector<int>v[1005];
void DFS(int p)
{viz[p]=1;
for(int i=0;i<v[p].size();i++) if(!viz[v[p][i]]&&flux[p][v[p][i]]<cap[p][v[p][i]]){DFS(v[p][i]);inainte[v[p][i]]=p;}
}
int main()
{f>>n>>k;
for(i=1;i<=k;i++){f>>a>>b>>c;
cap[a][b]=c;
v[a].push_back(b);
v[b].push_back(a);
}
do{
for(i=1;i<=n;i++) inainte[i]=0;
DFS(1);t=n;min1=10000;
if(!inainte[n])
break;
while(t!=1)
{ if(cap[inainte[t]][t]-flux[inainte[t]][t]<min1) {min1=cap[inainte[t]][t]-flux[inainte[t]][t];}
t=inainte[t];
}
t=n;
while(t!=1)
{ flux[inainte[t]][t]=flux[inainte[t]][t]+min1;
flux[t][inainte[t]]=flux[t][inainte[t]]-min1;
t=inainte[t];
}
for(i=1;i<=n;i++)viz[i]=0;}while(1);
for(i=2;i<=n;i++)
fluxmax+=flux[1][i];
g<<fluxmax<<'\n';
f.close();
g.close();
return 0;
}