记录编号 |
45049 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[顾研NOIP] 旅游电车 |
最终得分 |
100 |
用户昵称 |
天下第一的吃货殿下 |
是否通过 |
通过 |
代码语言 |
Pascal |
运行时间 |
0.403 s |
提交时间 |
2012-10-22 08:17:32 |
内存使用 |
0.64 MiB |
显示代码纯文本
var
a,b,c,d,e,n,m,top,time:longint;
qq:array[0..5001,0..51] of integer;
gs,stack,ft,mint:array[0..5001] of integer;
pd1,jl,pd2:array[0..5001] of boolean;
function min(xx,yy:longint):longint;
begin
if xx<yy then exit(xx)
else exit(yy);
end;
procedure ss(nn:integer);
var
i,j,k:longint;
begin
pd1[nn]:=true;
pd2[nn]:=true;
inc(top);
stack[top]:=nn;
inc(time);
ft[nn]:=time;
mint[nn]:=time;
for i:=1 to gs[nn] do
begin
if (pd1[qq[nn,i]]=false) then ss(qq[nn,i]);
if pd2[qq[nn,i]] then mint[nn]:=min(mint[nn],mint[qq[nn,i]]);
end;
if mint[nn]=ft[nn] then begin
j:=0;
k:=top;
while (stack[k+1]<>nn) and (j=0) do
begin
for i:=1 to gs[stack[k]] do
begin
if pd2[qq[stack[k],i]]=false then begin
j:=1;
break;
end;
end;
dec(k);
end;
while stack[top+1]<>nn do
begin
pd2[stack[top]]:=false;
if j=0 then jl[stack[top]]:=true;
dec(top);
end;
end;
end;
begin
assign(input,'buss.in');
reset(input);
assign(output,'buss.out');
rewrite(output);
read(n);
while n<>0 do
begin
read(m);
for a:=1 to n do
begin
mint[a]:=10000;
gs[a]:=0;
jl[a]:=false;
pd1[a]:=false;
pd2[a]:=false;
end;
time:=0;
top:=0;
for a:=1 to m do
begin
read(b,c);
inc(gs[b]);
qq[b,gs[b]]:=c;
end;
for a:=1 to n do
if pd1[a]=false then ss(a);
for a:=1 to n do
if jl[a] then write(a,' ');
read(n);
end;
close(input);
close(output);
end.