Pagini recente » Cod sursa (job #1167327) | Cod sursa (job #1855970) | Cod sursa (job #455578) | Cod sursa (job #1362587) | Cod sursa (job #1436788)
#include<cstdio>
#include<vector>
using namespace std;
int ic,sf,coada[1001],pred[1001],a[1001][1001];
bool viz[1001],marc[1001];
int n,m;
vector<int>v[1001];
int valmin(int nod){
int val;
//nod=coada[sf];
val=550000001;
while(pred[nod]!=0){
if(a[pred[nod]][nod]<val)
val=a[pred[nod]][nod];
nod=pred[nod];
}
return val;
}
void update(int nod){
int val,nnod;
val=550000001;
nnod=nod;
while(pred[nod]!=0){
if(a[pred[nod]][nod]<val)
val=a[pred[nod]][nod];
nod=pred[nod];
}
//nod=coada[sf];
nod=nnod;
while(pred[nod]!=0){
a[pred[nod]][nod]-=val;
a[nod][pred[nod]]+=val;
nod=pred[nod];
}
}
bool bfs(int nod){
ic=1;sf=1;
coada[ic]=nod;
viz[nod]=true;
bool boolfin=false;
while(ic<=sf){
for(int j=0;j<v[coada[ic]].size();j++){
int i=v[coada[ic]][j];
if(a[coada[ic]][i]!=0&&viz[i]==false){
sf++;
coada[sf]=i;
viz[i]=true;
pred[i]=coada[ic];
if(marc[i]==true&&a[i][n]>0){
viz[n]=true;
}
}
}
ic++;
}
return viz[n];
}
int main(){
int a1,b,c;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a1,&b,&c);
a[a1][b]=c;
v[a1].push_back(b);
v[b].push_back(a1);
if(b==n)
marc[a1]=true;
}
bool pp=true;
while(bfs(1)==true){
for(int i=1;i<=n;i++)
viz[i]=false;
for(int i=0;i<v[n].size();i++){
int e=v[n][i];
if(marc[e]==true){
pred[n]=e;
update(n);
}
}
}
int tot=0;
for(int i=1;i<=n;i++)
tot+=a[i][1];
printf("%d",tot);
return 0;
}