Pagini recente » Cod sursa (job #2851309) | Cod sursa (job #1488860) | Cod sursa (job #1315095) | Cod sursa (job #214041) | Cod sursa (job #1066224)
#include<fstream>
using namespace std;
struct nod{
int nr;
nod *next;
};
int d[100][100],p[100],ig,sg,r[100][100],in[100],out[100],cap[100];
void adauga(int a,int b,int c){
d[a][b]=c;
in[b]+=c;
out[a]+=c;
}
main(){
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,j,a,b,c;
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>a>>b>>c;
adauga(a,b,c);
}
int min=2;
for(i=2;i<=n-1;i++){
if(in[i]>out[i])cap[i]=out[i];
else cap[i]=in[i];
if(cap[min]>cap[i])min=i;
}
int f1[100],u,f0;
for(i=1;i<=n;i++){
f1[i]=0;
}
nod *r,*p,*v;
f1[min]=cap[min];
r=new nod;
r->next=NULL;
r->nr=min;
p=r;
while(r!=NULL){
u=r->nr;
f0=f1[u];
i=2;
while(f0>0 && i<=n){
if(d[u][i]){
if(f1[i]==0 && i!=n){
v = new nod;
v->nr=i;
v->next=r->next;
r->next=v;
}
if(d[u][i]<=f0){
f1[i]+= d[u][i];
f0-=d[u][i];
d[u][i]=0;
}else{
f1[i]+=f0;
d[u][i]-=f0;
f0=0;
}
// fout<<i<<" ";
}
i++;
}
cap[u]-=f1[u];
if(!cap[u]){
for(i=1;i<=n;i++){
d[i][u]=0;
d[u][i]=0;
}
if(r->nr==u){
r=r->next;
}
}
}
fout<<f1[n];
/* p=NULL;
for(i=1;i<=n;i++){
r = new nod;
r->nr=in[i];
r->next=NULL;
if(p==NULL){
p=r;
}else{
r->next=p; p=r;
}
}
r=p;
while(r!=NULL){
fout<<r->nr<<" ";
r=r->next;
}
*/
fin.close(); fout.close();
}