赛后刚码的
只凭了印象
预计会超时
var
f:array[1..1000,0..1000]of integer;
map:array[1..1000,1..1000]of boolean;
map1:array[1..1000]of boolean;
rd:array[1..1000]of integer;
n,m:integer;
procedure init;
var
a:array[1..1000]of integer;
i,j,k,t:integer;
begin
assign(input,'level.in');
assign(output,'level.out');
reset(input);rewrite(output);
read(m,n);
for i:=1 to n do
begin
fillchar(map1,sizeof(map1),false);
read(k);
for j:=1to k do
begin
read(a[j]);
map1[a[j]]:=true;
end;
for j:=a[1] to a[k]do
if not map1[j]then
for t:=1 to k do
if not map[a[t],j]then
begin
map[a[t],j]:=true;
inc(f[a[t],0]);
f[a[t],f[a[t],0]]:=j;
inc(rd[j]);
end;
end;
end;
procedure main;
var
v,tail,i,j,k:integer;
b:array[1..1000]of boolean;
boo:boolean;
l:array[1..1000]of integer;
begin
v:=0;
fillchar(b,sizeof(b),false);
repeat
inc(v);
boo:=true;
tail:=0;
for i:=1to m do
if not b[i]and(rd[i]=0)then
begin
b[i]:=true;
inc(tail);
l[tail]:=i;
boo:=false;
end;
for i:=1 to tail do
for j:=1 to f[l[i],0]do
dec(rd[f[l[i],j]]);
until boo;
write(v-1);
close(input);
close(output);
end;
begin
init;
main;
end.
自己造的数据2s才出来