Pagini recente » Istoria paginii runda/newcomers_1/clasament | Cod sursa (job #1746083) | Cod sursa (job #477428) | Cod sursa (job #561468) | Cod sursa (job #1046593)
#include <fstream>
#include <bitset>
#include <queue>
#include <algorithm>
using namespace std;
int cap[1005][1005];
int flux,n;
queue<int> coada;
bitset<1005> viz;
int minim[1005];
int inapoi[1005];
bool bfs()
{
//cout<<"bfs()"<<endl;
int i;
for(i=1;i<=n;i++)
viz[i]=0;
coada.push(1);
viz[1]=1;
minim[1]=110005;
inapoi[1]=0;
int y;
while(!coada.empty())
{
y=coada.front();
//cout<<"se scoate "<<y<<endl;
coada.pop();
for(i=1;i<=n;i++)
{
//cout<<i<<' ';
if(cap[y][i])
if(!viz[i])
{
inapoi[i]=y;
minim[i]=min(cap[y][i],minim[y]);
viz[i]=1;
if(i==n)
break;
coada.push(i);
}
}
//cout<<endl;
}
//cout<<endl;
if(!viz[n])
return 0;
return 1;
}
int main()
{
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int m,i,a,b,c;
cin>>n>>m;
for(i=0;i<m;i++)
{
cin>>a>>b>>c;
cap[a][b]=c;
}
int aux;
while(bfs())
{
aux=n;
while(inapoi[aux])
{
//cout<<"da"<<endl;
cap[inapoi[aux]][aux]-=minim[n];
cap[aux][inapoi[aux]]+=minim[n];
aux=inapoi[aux];
}
flux+=minim[n];
}
cout<<flux<<'\n';
cin.close();
cout.close();
return 0;
}