Pagini recente » Cod sursa (job #2696333) | Cod sursa (job #1970930) | Cod sursa (job #1970882) | Cod sursa (job #494323) | Cod sursa (job #1969490)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int inf=0x3f3f3f3f;
int C[1001][1001],n,tata[1001];
vector<int>G[1001];
queue<int>Q;
bitset<1001>viz;
bool bfs()
{
Q.push(1);
viz[1]=1;
while(Q.size())
{
int nod=Q.front();
Q.pop();
if(nod==n) continue;
for(unsigned i=0;i<G[nod].size();i++)
{
if(viz[G[nod][i]]==0 && C[nod][G[nod][i]]!=0)
{
tata[G[nod][i]]=nod;
viz[G[nod][i]]=1;
Q.push(G[nod][i]);
}
}
}
if(viz[n]==1) return 1;
return 0;
}
int main()
{
int m,x,y,i,fmin,flux=0;
fin>>n>>m;
while(m--)
{
fin>>x>>y;
fin>>C[x][y];
G[x].push_back(y);
G[y].push_back(x);
}
while(bfs())
{
for(unsigned j=0;j<G[n].size();j++)
{
if(viz[G[n][j]]==0 || C[G[n][j]][n]==0) continue;
tata[n]=G[n][j];
fmin=inf;
for(i=n;i!=1;i=tata[i])
{
fmin=min(fmin,C[tata[i]][i]);
}
if(fmin==0) continue;
for(i=n;i!=1;i=tata[i])
{
C[tata[i]][i]-=fmin;
C[i][tata[i]]+=fmin;
}
flux+=fmin;
}
viz.reset();
}
fout<<flux;
}