Pagini recente » Cod sursa (job #2680475) | Cod sursa (job #680214) | Cod sursa (job #767704) | Cod sursa (job #2176173) | Cod sursa (job #1048423)
#include <cstdio>
#include <vector>
//#include <bitset>
//#include <queue>
#include <algorithm>
#include <utility>
#include <cstring>
using namespace std;
int cap[1005][1005];
//int pasi;
int flux,n;
//queue<int> coada;
//bool viz[1005];
int minim[1005];
int inapoi[1005];
vector<int> graf[1005];
int coada[1005], pasi;
//bitset<1005> viz;
inline bool bfs()
{
fprintf(stderr, "3123123");
int i;
//cout<<"bfs()"<<endl;
//for(i=1;i<=n;i++)
// viz[i]=0;
memset(inapoi,0,sizeof(inapoi));
int st=1,dr=1;
coada[1]=1;
//viz[1]=1;
//minim[1]=110005;
inapoi[1]=-1;
fprintf(stderr, "da");
//vector<int>::iterator it;
int y;
bool stop=false;
while(st<=dr && !stop)
{
// cerr<<"prost!"<<endl;
y=coada[st++];
//cout<<"se scoate "<<y<<endl;
//for(i=s1;i<=n;i++)
//{
//cout<<i<<' ';
fprintf(stderr, "opa");
for(i=0;i<graf[y].size();i++, pasi++)
{
//pasi++;
if(cap[y][graf[y][i]])
if(!inapoi[graf[y][i]])
{
fprintf(stderr, "intru\n");
//pasi++;
inapoi[graf[y][i]]=y;
fprintf(stderr, "probabil");
//minim[graf[y][i]]=min(cap[y][graf[y][i]],minim[y]);
//viz[*it]=1;
fprintf(stderr, " -----da-----");
if(graf[y][i]==n)
{
fprintf(stderr, "iesit");
stop=true;
break;
}
fprintf(stderr, "------nu-----");
//coada.push(*it);
fprintf(stderr, "nunu");
coada[++dr]=graf[y][i];
fprintf(stderr, "ies\n");
}
}
//cout<<endl;
}
//while(!coada.empty())
// coada.pop();
//cout<<endl;
fprintf(stderr, "ura!");
if(!inapoi[n])
return 0;
fprintf(stderr, "nuuuuuuuuuuuuuuu");
return 1;
}
int main()
{
//ifstream cin("maxflow.in");
//ofstream cout("maxflow.out");
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int m,i,a,b,c;
//cin>>n>>m;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
//cin>>a>>b>>c;
scanf("%d%d%d",&a,&b,&c);
graf[a].push_back(b);
graf[b].push_back(a);
cap[a][b]+=c;
}
int aux;
while(bfs())
{
//cerr<<"oribil!"<<endl;
aux=n;
int minim=110005;
while(inapoi[aux]!=-1)
{
aux=min(aux,cap[inapoi[aux]][aux]);
aux=inapoi[aux];
fprintf(stderr, "%d",aux);
fprintf(stderr, "primul while");
}
fprintf(stderr, "334");
aux=n;
while(inapoi[aux]!=-1)
{
//cout<<"da"<<endl;
cap[inapoi[aux]][aux]-=minim;
cap[aux][inapoi[aux]]+=minim;
aux=inapoi[aux];
// cerr<<"inadmisibil"<<endl;
// cerr<<aux<<endl;
fprintf(stderr, "al doilea while");
}
fprintf(stderr, "335");
flux+=minim;
}
//cerr<<pasi<<endl;
//cout<<flux<<'\n';
printf("%d\n",flux);
//cin.close();
//cout.close();
return 0;
}