Pagini recente » Cod sursa (job #1278413) | Cod sursa (job #73008) | Cod sursa (job #614832) | Cod sursa (job #2267234) | Cod sursa (job #613197)
Cod sursa(job #613197)
#include<fstream>
#include<vector>
#define min(a,b) a<b? a:b
using namespace std;
struct nod
{
int cap,cont;
};
vector<int> retea[5000];
int leg[5000][5000];
nod nods[5000];
int n,m,max;
int flow(int ind)
{
if(ind==n) return 0;
for(int i=0;i<retea[ind].size();i++)
{
int vol=min(nods[retea[ind][i]].cap,leg[ind][retea[ind][i]]);
if(vol>nods[ind].cont)vol=nods[ind].cont;
nods[retea[ind][i]].cont=vol;
nods[ind].cont-=vol;
nods[ind].cont+=flow(retea[ind][i]);
if(nods[ind].cont==0)break;
}
return nods[ind].cont;
}
int main()
{
ifstream in("maxflow.in");
ofstream out("maxflow.out");
in >> n >>m;
for(int i=0;i<m;i++)
{
int s,d,c;
in >> s >> d>> c;
leg[s][d]=c;
nods[s].cap+=c;
retea[s].push_back(d);
}
nods[1].cont=nods[1].cap;
nods[n].cap=nods[1].cap;
flow(1);
out<< nods[1].cap-nods[1].cont <<'\n';
}