program rq241;
var
link:array[1..10,1..10] of boolean;
n,i:integer;
queue:array[1..10] of integer;
queuep:integer;
state:array[1..10] of boolean;
flag:array[1..10] of boolean;
z:longint;
procedure init;
var
i,j,l,c:integer;
begin
readln(n);
fillchar(link,sizeof(link),false);
for i:=1 to n do
begin
read(c);
for j:=1 to c do
begin
read(l);
link[i][l]:=true;
end;
readln;
end;
queuep:=0;
fillchar(state,sizeof(state),false);
fillchar(flag,sizeof(flag),false);
end;
procedure dfs(x:integer);
var i:integer;
begin
flag[x]:=true;
if (x=1)and(z<>0) then begin writeln('What a poor boy!');halt;end;
inc(z);
if link[x][x] then begin writeln('What a poor boy!');halt;end;
for i:=1 to n do
if (link[x][i])and(not state[i]) then
if flag[i] then begin writeln('What a poor boy!');halt;end
else dfs(i);
inc(queuep);
queue[queuep]:=x;
state[i]:=true;
flag[x]:=false;
end;
begin
z:=0;
init;
dfs(1);
for i:=1 to queuep-1 do write(queue[i],' ');
writeln(queue[queuep]);
end.
floyd计算1的前驱然后拓扑排序……为什么WA80……
program rq241;
var
link:array[1..10,1..10] of boolean;
n:integer;
waitsort:array[1..10] of integer;
waitsortp:integer;
procedure init;
var i,j:integer;
c,p:integer;
begin
fillchar(link,sizeof(link),false);
readln(n);
for i:=1 to n do
begin
read(p);
for j:=1 to p do
begin
read(c);
link[c][i]:=true;
end;
readln;
end;
end;
procedure floyd;
var i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if (link[j][i])and(link[i][k]) then link[j][k]:=true;
end;
procedure pick;
var i,j:integer;
begin
waitsortp:=0;
for i:=1 to n do
for j:=1 to n do
if (link[i][j])and(link[j][i]) then
begin
writeln('What a poor boy!');
halt;
end;
for i:=2 to n do
if link[i][1] then
begin
inc(waitsortp);
waitsort[waitsortp]:=i;
end;
end;
procedure tpsort;
var i,j,k:integer;
flag:array[1..10] of boolean;
tf:boolean;
begin
fillchar(flag,sizeof(flag),false);
for i:=1 to waitsortp do flag[waitsort[i]]:=true;
for i:=1 to waitsortp do
begin
for j:=1 to waitsortp do
if flag[waitsort[j]] then
begin
tf:=true;
for k:=1 to n do if link[k][waitsort[j]] then tf:=false;
if tf then
begin
flag[waitsort[j]]:=false;
for k:=1 to n do link[waitsort[j]][k]:=false;
write(waitsort[j],' ');
break;
end;
end;
end;
writeln('1');
end;
begin
init;
floyd;
pick;
tpsort;
end.
状态: Accepted
测评机: Xeost[5]
得分: 100分 [我要评价一下题目~]
提交日期: 2012-6-29 22:29:00
有效耗时: 1654毫秒
测试结果1: 通过本测试点|有效耗时187ms
测试结果2: 通过本测试点|有效耗时156ms
测试结果3: 通过本测试点|有效耗时172ms
测试结果4: 通过本测试点|有效耗时171ms
测试结果5: 通过本测试点|有效耗时156ms
测试结果6: 通过本测试点|有效耗时172ms
测试结果7: 通过本测试点|有效耗时156ms
测试结果8: 通过本测试点|有效耗时172ms
测试结果9: 通过本测试点|有效耗时156ms
测试结果10: 通过本测试点|有效耗时156ms