Pagini recente » Istoria paginii runda/wellcodesimulareav-10martie/clasament | Cod sursa (job #556890) | Cod sursa (job #558765) | Cod sursa (job #3123042) | Cod sursa (job #1165960)
#include<fstream>
#include<cstdio>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;++a)
#include<cstring>
#include<bitset>
#include<cmath>
#include<iomanip>
#include<queue>
#define f cin
#define g cout
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ll long long
#define bit 20
#define inf (1<<30)
#define base 256
#define ba 255
#define N 1010
#define EPS 1e-12
#define mod 666013
#define inu "maxflow.in"
#define outu "maxflow.out"
using namespace std;
ifstream f(inu);
ofstream g(outu);
//int dx[]={0,0,0,1,-1};
//int dy[]={0,1,-1,0,0};
vector<int> v[N];
queue<int> q;
int T[N],m,c,x,y,Cp[N][N],F[N][N],n,flux,minim,des,nod,viz[N];
int bfs()
{
q.push(1);
memset(viz,0,sizeof(viz));
viz[1]=1;
while(!q.empty())
{
nod=q.front();
q.pop();
if(nod==n)
continue;
for(int i=0;i<v[nod].size();++i)
{
des=v[nod][i];
if(Cp[nod][des]==F[nod][des]||viz[des])
continue;
T[des]=nod;
viz[des]=1;
q.push(des);
}
}
return viz[n];
}
int main ()
{
f>>n>>m;
FOR(i,1,m)
{
f>>x>>y>>c;
v[x].push_back(y);
v[y].push_back(x);
Cp[x][y]=c;
}
while(bfs())
for(int i=0;i<v[n].size();++i)
{
des=v[n][i];
if(!viz[des]||F[des][n]==Cp[des][n])
continue;
T[n]=des;
des=n;
int minim=(1<<30);
for(;T[des];des=T[des])
{
minim=min(minim,Cp[T[des]][des]-F[T[des]][des]);
}
des=n;
if(!minim)
continue;
for(;T[des];des=T[des])
{
F[T[des]][des]+=minim;
F[des][T[des]]-=minim;
}
flux+=minim;
}
g<<flux;
return 0;
}