Pagini recente » Cod sursa (job #1072755) | Cod sursa (job #1496704) | Cod sursa (job #190706) | Cod sursa (job #457634) | Cod sursa (job #2126774)
///#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
const int nmax=1000;
struct data
{
int nod,flow,use;
};
int n,m;
vector<data>v[nmax+5]; int l[nmax+5];
bool viz[nmax+5],gata=0;
int stiva[nmax+5],vf;
int S,D;
void dfs(int nod,int MI)
{
if(gata==1)
return;
if(nod==D)
{
int nod_start=1;
for(int i=1;i<=vf;i++)
{
v[nod_start][stiva[i]].use+=MI;
nod_start=v[nod_start][stiva[i]].nod;
}
gata=1;
return;
}
viz[nod]=1;
for(int i=0;i<l[nod];i++)
{
int rezid;
rezid=v[nod][i].flow-v[nod][i].use;
if(rezid>0 and viz[v[nod][i].nod]==0)
{
vf++;
stiva[vf]=i;
dfs(v[nod][i].nod,min(rezid,MI));
vf--;
}
}
}
void curata()
{
for(int i=1;i<=n;i++)
viz[i]=0;
}
bool s[nmax+5],d[nmax+5];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
s[i]=d[i]=1;
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
v[a].push_back({b,c,0});
s[a]=0;
d[b]=0;
l[a]++;
}
for(int i=1;i<=n;i++)
{
if(d[i]==1)
S=i;
if(s[i]==1)
D=i;
}
cout<<S<<" "<<D<<"\n";
return 0;
while(1)
{
gata=0;
dfs(S,2e9);
curata();
if(gata==0)
break;
}
int ans=0;
for(int nod=1;nod<=n;nod++)
for(int i=0;i<l[nod];i++)
if(v[nod][i].nod==D)
ans+=v[nod][i].use;
cout<<ans;
return 0;
}
/**
**/