Pagini recente » Cod sursa (job #2405646) | Cod sursa (job #78563) | Cod sursa (job #2531778) | Cod sursa (job #2340988) | Cod sursa (job #626158)
Cod sursa(job #626158)
#include<fstream>
#include<queue>
#include<vector>
#define N 1001
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,x[N][N],maxflow,p[N],drum[N],nr;
bool vizitat[N];
vector<int> g[N];
inline void reviz() {
for(int i=1;<=n;++i)
vizitat[i]=;
}
void add_drum() {
int i,smin=1<<22;
for(i=1;i!=nr;++i) {
if(x[drum[i]][drum[i+1]]<smin)
smin=x[drum[i]][drum[i+1]];
}
maxflow+=smin;
}
void df(int nod) {
int i;
for(i=0;i!=g[nod].size();++i) if(!vizitat[nod]) {
if(g[nod][i]==n)
add_drum();
vizitat[nod]=true;
drum[++nr]=g[nod][i];
df(g[nod][i]);
--nr;
vizitat[nod]=false;
}
}
int main() {
int i,j,a,b,c;
in >> n >> m;
for(i=1;i<=m;++i) {
in >> a >> b >> c;
x[a][b]+=c;
g[a].push_back(b);
g[b].push_back(a);
}
while(df())
reviz();
out << maxflow;
return 0;
}