Pagini recente » Cod sursa (job #1099801) | Cod sursa (job #2356364) | Cod sursa (job #1405171) | Cod sursa (job #1681299) | Cod sursa (job #2779494)
#include <bits/stdc++.h>
#define nmax 1001
#define dest first
#define cap second
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
unordered_map<int,int> adj[nmax];
int n,m;
int doFlux()
{
bool ok=1;
bool vis[nmax];
int b[nmax];
while(ok)
{
ok=0;
for(int i=1;i<=n;i++)
{
vis[i]=0;
}
queue<int> q;
q.push(1);
//g<<"one more\n";
while(!q.empty())
{
int c=q.front(); q.pop();
//g<<"c, "<<c<<": ";
for(auto e:adj[c])
{
//g<<e.dest<<','<<e.cap<<','<<vis[e.dest]<<' ';
if(!vis[e.dest]&&e.cap>0)
{
if(e.dest==n)
{
ok=1;
//g<<"Yes!\n";
int bc=c,mn=adj[c][n];
while(bc!=1)
{
mn=min(adj[b[bc]][bc],mn);
bc=b[bc];
}
bc=c;
adj[c][n]-=mn;
adj[n][c]+=mn;
while(bc!=1)
{
adj[b[bc]][bc]-=mn;
adj[bc][b[bc]]+=mn;
bc=b[bc];
}
}
else
{
q.push(e.dest);
vis[e.dest]=1;
b[e.dest]=c;
}
}
}
//g<<"\n";
}
}
int ans=0;
for(auto e:adj[n])
{
ans+=e.cap;
}
return ans;
}
int main()
{
f>>n>>m;
for(int i=0;i<m;i++)
{
int a,b,c;
f>>a>>b>>c;
adj[a][b]=c;
}
g<<doFlux()<<'\n';
/*for(int i=1;i<=n;i++)
{
g<<i<<": ";
for(auto e:adj[i])
{
g<<e.dest<<','<<e.cap<<' ';
}
g<<'\n';
}*/
return 0;
}