Pagini recente » Cod sursa (job #165615) | Cod sursa (job #1874705) | Cod sursa (job #1156568) | Rating Paula Alexandrescu (paulaalexandrescu) | Cod sursa (job #320131)
Cod sursa(job #320131)
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
#define maxn 1024
#define pb push_back
long n, i, m, j, k, a, b, x, l, r, ok, nod, size, y, fiu;
long c[maxn][maxn], nrm[maxn][maxn], up[maxn], f[maxn], coa[maxn], coa1[maxn], coa2[maxn], sol[maxn*10];
vector <long> v[maxn];
long min(long a, long b)
{
if(a>b) return b;
return a;
}
int main()
{
freopen("critice.in", "r", stdin);
freopen("critice.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i=1; i<=m; i++)
{
scanf("%d %d %d", &a, &b, &x);
v[a].pb(b);
v[b].pb(a);
c[a][b]=x;
c[b][a]=x;
nrm[a][b]=i;
nrm[b][a]=i;
}
ok=1;
while(ok)
{
for(i=1; i<=n; i++)
{
f[i]=0;
up[i]=-1;
}
f[1]=2147000000;
coa[1]=1;
for(l=1, r=1; l<=r; l++)
{
nod=coa[l];
for(i=0; i<v[nod].size(); i++)
{
fiu=v[nod][i];
if(f[fiu]==0 && c[nod][fiu]>0)
{
f[fiu]=min(f[nod], c[nod][fiu]);
up[fiu]=nod;
r++;
coa[r]=fiu;
}
}
if(f[n]>0) break;
}
nod=n;
if(f[n]>0)
{
ok=1;
while(up[nod]!=-1)
{
i=up[nod];
c[nod][i]+=f[n];
c[i][nod]-=f[n];
nod=up[nod];
}
}
else ok=0;
}
size=sol[0];
printf("%d\n", sol[0]);
for(i=1; i<=sol[0]; i++)
{
printf("%d\n", sol[i]);
}
return 0;
}