Cod sursa(job #1124298)

Utilizator Edward2012Eduard Ursinschi Edward2012 Data 26 februarie 2014 12:00:09
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#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;
}