Pagini recente » Profil juliana_cristina | Cod sursa (job #1201233) | Cod sursa (job #2670936) | Cod sursa (job #2427819) | Cod sursa (job #743950)
Cod sursa(job #743950)
Program ctc;
type lista=^celula;
celula=record
next:lista;
inf:longint;
end;
var a,b,c:array [1..100000] of lista;
aux:array [1..100000] of boolean;
st:array [1..100000] of longint;
b1,b2:array [1..1 shl 16] of char;
i,x,y,n,m,nr,st1:longint;
p,r:lista;
fi,fo:text;
procedure dfs(r:lista; k:longint);
begin
aux[k]:=true;
while r<>nil do begin
if aux[r^.inf]=false then dfs(a[r^.inf], r^.inf);
r:=r^.next;
end;
inc(st1); st[st1]:=k;
end;
procedure dfs1(r:lista; k:longint);
begin
aux[k]:=false;
while r<>nil do begin
if aux[r^.inf]=true then begin
new(p); p^.inf:=r^.inf; p^.next:=c[nr]; c[nr]:=p;
dfs1(b[r^.inf],r^.inf);
end;
r:=r^.next;
end;
end;
begin
assign(fi,'ctc.in');
assign(fo,'ctc.out');
settextbuf(fi,b1); settextbuf(fo,b2);
reset(fi); rewrite(fo); readln(fi,n,m);
for i:=1 to m do begin
readln(fi,x,y);
new(p); p^.inf:=y; p^.next:=a[x]; a[x]:=p;
new(p); p^.inf:=x; p^.next:=b[y]; b[y]:=p;
end;
for i:=1 to n do
if aux[i]=false then dfs(a[i],i);
for i:=n downto 1 do
if aux[st[i]]=true then begin
inc(nr);
new(p); p^.inf:=st[i]; p^.next:=nil; c[nr]:=p;
dfs1(b[st[i]],st[i]);
end;
writeln(fo,nr);
for i:=1 to nr do begin
p:=c[i];
while p<>nil do begin
write(fo,p^.inf,' ');
p:=p^.next;
end;
writeln(fo);
end;
close(fo);
end.