Pagini recente » Cod sursa (job #2524615) | Cod sursa (job #1918632) | Cod sursa (job #497804) | Cod sursa (job #1576047) | Cod sursa (job #2874088)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
struct arc{ int j,c; };
int n,m,T[1001],C[1001][1001],fluxmax;
vector<int> G[1001];
int BF()
{
queue<int> Q;
for(int i=1;i<=n;i++)
T[i]=0;
Q.push(1);
while(!Q.empty())
{
int i=Q.front();
Q.pop();
for(auto j: G[i])
if(!T[j] && C[i][j]>0)
{
Q.push(j);
T[j]=i;
if(j==n) return 1;
}
}
return 0;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c;
fin>>x>>y>>c;
G[x].push_back(y);
G[y].push_back(x);
C[x][y]=c;
}
while(BF())
{
int cmin=110000;
int i=n;
while(i!=1)
{
if(C[T[i]][i]<cmin) cmin=C[T[i]][i];
i=T[i];
}
fluxmax=fluxmax+cmin;
i=n;
while(i!=1)
{
C[T[i]][i]=C[T[i]][i]-cmin;
C[i][T[i]]=C[i][T[i]]+cmin;
i=T[i];
}
}
fout<<fluxmax;
return 0;
}