Pagini recente » Cod sursa (job #2970746) | Cod sursa (job #334231) | Cod sursa (job #1161791) | Cod sursa (job #1683635) | Cod sursa (job #1217488)
program pisici;
type lista=^celula;
celula=record
info:longint;
next:lista;
end;
var n,m,i,z,min,ans,f:longint;
x,y:array[1..10000] of longint;
a:array[1..1000] of lista;
coada,v,q,r:lista;
c:array[1..1000,1..1000]of longint;
cr:array[1..1000,1..1000]of byte;
from:array[1..1000] of longint;
vis:array[1..1000] of byte;
bufin,bufout:array[1..100000] of byte;
ok:boolean;
begin
assign(input,'critice.in');
reset(input);
settextbuf(input,bufin);
assign(output,'critice.out');
rewrite(output);
settextbuf(output,bufout);
readln(n,m);
for i:=1 to m do
begin
readln(x[i],y[i],z);
new(r);
r^.info:=y[i];
r^.next:=a[x[i]];
a[x[i]]:=r;
c[x[i],y[i]]:=z;
new(r);
r^.info:=x[i];
r^.next:=a[y[i]];
a[y[i]]:=r;
c[y[i],x[i]]:=z;
end;
ok:=true;
while ok do
begin
ok:=false;
for i:=1 to n do
begin
from[i]:=0;
vis[i]:=0;
end;
vis[1]:=1;
new(coada);
coada^.info:=1;
v:=coada;
while coada<>nil do
begin
q:=a[coada^.info];
while q<> nil do
begin
if c[coada^.info,q^.info]<>0 then
if vis[q^.info]=0 then
begin
from[q^.info]:=coada^.info;
if q^.info=n then
begin
ok:=true;
min:=1000000000;
z:=n;
while from[z]<>0 do
begin
if min>c[from[z],z] then min:=c[from[z],z];
z:=from[z];
end;
z:=n; f:=f+min;
while from[z]<>0 do
begin
c[from[z],z]:=c[from[z],z]-min;
c[z,from[z]]:=c[z,from[z]]+min;
z:=from[z];
end;
end else
begin
vis[q^.info]:=1;
new(r);
r^.info:=q^.info;
v^.next:=r;
v:=r;
end;
end;
q:=q^.next;
end;
coada:=coada^.next;
end;
end;
for i:=1 to n do
begin
vis[i]:=0;
end;
vis[1]:=1;
new(coada);
coada^.info:=1;
v:=coada;
while coada<>nil do
begin
q:=a[coada^.info];
while q<> nil do
begin
if c[coada^.info,q^.info]=0 then
begin
cr[coada^.info,q^.info]:=1;
end else
if vis[q^.info]=0 then
begin
if q^.info<>n then
begin
vis[q^.info]:=1;
new(r);
r^.info:=q^.info;
v^.next:=r;
v:=r;
end;
end;
q:=q^.next;
end;
coada:=coada^.next;
end;
for i:=1 to m do
if (cr[x[i],y[i]]=1)or(cr[y[i],x[i]]=1) then inc(ans);
writeln(ans);
for i:=1 to m do
if (cr[x[i],y[i]]=1)or(cr[y[i],x[i]]=1) then writeln(i);
close(output);
end.