Pagini recente » Cod sursa (job #1526881) | Cod sursa (job #290636) | Cod sursa (job #2983595) | Cod sursa (job #1159435) | Cod sursa (job #2391089)
#include <bits/stdc++.h>
#define dim 1005
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m,finish,start=1;
int cap[dim][dim],before[dim];
bool seen[dim];
vector <int> graph[dim];
queue <int> q;
void Read()
{
f>>n>>m;
finish=n;
for(int i=1; i<=m; ++i)
{
int x,y,c;
f>>x>>y>>c;
graph[x].push_back(y);
graph[y].push_back(x);
cap[x][y]+=c;
}
}
bool Bfs()
{
while(!q.empty())q.pop();
for(int i=start+1; i<=finish; ++i)seen[i]=false;
seen[start]=true;
q.push(start);
while(!q.empty())
{
int node=q.front();
q.pop();
if(node==finish)return true;
for(int i=0; i<graph[node].size(); ++i)
{
int son=graph[node][i];
if(!seen[son]&&cap[node][son]!=0)
{
seen[son]=true;
before[son]=node;
q.push(son);
}
}
}
return false;
}
void MaxFlow()
{
int maxflow=0;
while(Bfs())
for(int i=0; i<graph[finish].size(); ++i)
{
int node=graph[finish][i];
if(seen[node]&&cap[node][finish]!=0)
{
before[finish]=node;
int flow=int(1e9);
for(int son=finish; son!=start; son=before[son])
flow=min(flow,cap[before[son]][son]);
maxflow+=flow;
for(int son=finish; son!=start; son=before[son])
{
cap[before[son]][son]-=flow;
cap[son][before[son]]+=flow;
}
}
}
g<<maxflow;
}
int main()
{
Read();
MaxFlow();
return 0;
}