Pagini recente » Cod sursa (job #2296487) | Cod sursa (job #2879914) | Cod sursa (job #3271660) | Cod sursa (job #857163) | Cod sursa (job #3033179)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
struct muchie
{
int u,v,cap;
};
vector <muchie> edge;
vector <int> G[1005];
int viz[5005];
int t[5005];
void dfs(int nod)
{
int i,urm;
viz[nod]=1;
for(i=0;i<G[nod].size();i++)
{
urm=G[nod][i];
if(viz[edge[urm].v]==0 && edge[urm].cap>0)
{
t[edge[urm].v]=urm;
dfs(edge[urm].v);
}
}
}
int main()
{
int n,m,u,v,cap,i,x,flux=0;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>u>>v>>cap; t[i]=-1;
edge.push_back({u,v,cap});
G[u].push_back(edge.size()-1);
edge.push_back({v,u,0});
G[v].push_back(edge.size()-1);
}
while(1)
{
dfs(1);
if(viz[n]==0)
break;
x=n;
while(t[x]!=-1)
{
edge[t[x]].cap--;
edge[(t[x]^1)].cap++;
x=edge[t[x]].u;
}
flux++;
for(i=1;i<=n;i++)
{
viz[i]=0;
}
for(i=0;i<edge.size();i++)
{
t[i]=-1;
}
}
g<<flux;
return 0;
}