Pagini recente » Istoria paginii utilizator/mihaifilipoiu | Cod sursa (job #1983344) | Cod sursa (job #904976) | Cod sursa (job #231719) | Cod sursa (job #320140)
Cod sursa(job #320140)
#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*20];
vector <long> v[maxn];
long min(long a, long b)
{
if(a>b) return b;
return a;
}
void df1(long nod)
{
if(f[nod]) return;
f[nod]=1;
for(long i=0; i<v[nod].size(); i++)
{
long fiu=v[nod][i];
if(c[nod][fiu]!=0) df1(fiu);
}
}
void df2(long nod)
{
if(f[nod]) return;
f[nod]=2;
for(long i=0; i<v[nod].size(); i++)
{
long fiu=v[nod][i];
if(c[fiu][nod]!=0) df2(fiu);
}
}
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;
coa1[i]=a;
coa2[i]=b;
}
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;
}
memset(f, 0, sizeof(f));
df1(1);
df2(n);
for(i=1; i<=m; i++)
{
if(f[coa1[i]]+f[coa2[i]]==3)
{
sol[0]++;
sol[sol[0]]=i;
}
}
size=sol[0];
printf("%d\n", sol[0]);
for(i=1; i<=sol[0]; i++)
{
printf("%d\n", sol[i]);
}
return 0;
}