3000毫秒也会超时啊…
满分的C++:
#include <iostream>
using namespace std;
int main()
{
bool info[1001][6][1001];
int N, L, K;
cin>>N>>L;
for(int person_index = 1; person_index <= N; person_index++ )
for(int level = 0; level < L; level++ )
info[person_index][level][person_index] = true;
for (int person_t = 1; person_t <= N; person_t++ ){
int NN;
cin>>NN;
for(int i = 0; i < NN; i++ ){
int person_index;
cin>>person_index;
info[person_index][0][person_t] = true;
}
}
for (int level = 1; level < L; level++)
for (int person_index = 1; person_index <= N; person_index++)//对每个人
for (int person_t = 1; person_t <= N; person_t++)//计算其它所有人
if(info[person_index][0][person_t])//如果是他直接关注的
for (int person_tt = 1; person_tt <= N; person_tt++)//去看看
if(info[person_t][level-1][person_tt])//如果直接关注的人level-1层间接关注了
info[person_index][level][person_tt] = true;//那么level层间接关注
cin>>K;
for(int i = 0; i < K; i++){
int person_index;
cin>>person_index;
int count = 0;
for(int person_t = 1; person_t <= N; person_t++)
if(info[person_index][L-1][person_t])
count ++;
cout<<count - 1 <<endl;
}
}
超时的lua:
local readF = io.read('*a'):gmatch('%d+')
local readFunc = function() return tonumber(readF()) end
local N = readFunc() L = readFunc()
local info = {}
for i = 1, N do
info[i] = {}
end
for i = 1, N do
for j = 1, L do
info[i][j] = {}
info[i][j][i] = true
end
end
for i = 1, N do
local NN = readFunc()
for j = 1, NN do
info[readFunc()][1][i] = true
end
end
for level = 2, L do
for person_index = 1, N do
for idol, _ in pairs(info[person_index][1]) do
for idol_trigger, _ in pairs(info[idol][level - 1]) do
info[person_index][level][idol_trigger] = true
end
end
end
end
local K = readFunc()
for i = 1, K do
local person_index = readFunc() count = 0
for _, _ in pairs(info[person_index][L]) do
count = count + 1
end
print(count - 1)
end