一开始使用高中oi时使用的链式前向星存储邻接表,但超时了,我也不知道为什么会超时。。。改用vector来存储邻接表就可以了...
#include<bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
using std::queue;
bool visit[1005];
int n,k,cnt,ans;
struct node
{
int id;
int layer;
};
std::vector<node> adj[1005];
int bfs(int root)
{
ans=0;
memset(visit,false,sizeof(visit));
queue<node> q;
node start;
start.id=root;
start.layer=0;
q.push(start);
visit[start.id]=true;
while(!q.empty())
{
node topnode=q.front();
q.pop();
int x=topnode.id;
for(int i=0;i<adj[x].size();i++)
{
node next=adj[x][i];
if(visit[next.id]==false&&topnode.layer<k)
{
visit[next.id]=true;
next.layer=topnode.layer+1;
q.push(next);
ans++;
}
}
}
return ans;
}
signed main(void)
{
scanf("%d%d",&n,&k);
int temp1,temp2,temp3,temp4;
for(int i=1;i<=n;i++)
{
scanf("%d",&temp1);
for(int j=1;j<=temp1;j++)
{
scanf("%d",&temp2);
node m;
m.id=i;
adj[temp2].push_back(m);
}
}
scanf("%d",&temp3);
for(int i=1;i<=temp3;i++)
{
scanf("%d",&temp4);
printf("%d\n",bfs(temp4));
}
return 0;
}