#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1001;
struct Node{
int data;
int level;
vector<int> userlist;
Node(){
data=0;
level=0;
}
}node[MAXN];
int n,l;
int bfs(int root){
queue<Node> q;
node[root].level=0;
q.push(node[root]);
int cnt=0;
int hash[MAXN]={};
hash[root]=1;
while(!q.empty()){
Node now=q.front();
q.pop();
for(int i=0;i<now.userlist.size();i++){
node[now.userlist[i]].level=now.level+1;
if(node[now.userlist[i]].level<=l&&hash[node[now.userlist[i]].data]==0){
cnt++;
hash[node[now.userlist[i]].data]=1;
q.push(node[now.userlist[i]]);
}
}
}
return cnt;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
cin>>n>>l;
vector<int> ppp[MAXN];
for(int i=0;i<n;i++){
node[i+1].data=i+1;
int k;
cin>>k;
for(int j=0;j<k;j++){
int temp;
cin>>temp;
ppp[temp].push_back(i+1);
}
}
for(int i=1;i<=n;i++){
if(ppp[i].size()!=0){
for(int j=0;j<ppp[i].size();j++){
node[i].userlist.push_back(ppp[i][j]);
}
}
}
int t=0;cin>>t;
for(int i=0;i<t;i++){
int temp1;
cin>>temp1;
cout<<bfs(temp1)<<endl;
}
return 0;
}
二刷AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1010;
int G[MAXN][MAXN]={};
int height[MAXN]={};
int num=0;int n,l;
bool vis[MAXN]={false};
void bfs(int index){
queue<int> q;
q.push(index);
height[index]=0;vis[index]=true;
while(!q.empty()){
int now=q.front();
q.pop();
if(height[now]>=l){
return;
}
for(int i=1;i<=n;i++){
if(vis[i]==false&&G[now][i]==1){
q.push(i);num++;height[i]=height[now]+1;vis[i]=true;
}
}
}
}
int main()
{
freopen("in.txt","r",stdin);
cin>>n>>l;
fill(G[0],G[0]+MAXN*MAXN,0);
for(int i=1;i<=n;i++){
int t;cin>>t;
for(int j=0;j<t;j++){
int temp;cin>>temp;
G[temp][i]=1;
}
}
int k;cin>>k;
for(int i=0;i<k;i++){
int t;cin>>t;
bfs(t);
cout<<num<<endl;
num=0;
fill(vis,vis+MAXN,false);
fill(height,height+MAXN,0);
}
return 0;
}