本题思路 考虑转发,且有层数(即转发最多通过几个非直接follows),所以考虑用BFS,因为BFS不涉及递归之类的,所以要用Node设置layer值。
#include<cstdio> #include<iostream> #include<vector> #include<queue> #include<cstring> using namespace std; const int maxn=1010; struct node { int layer; int id; }; vector<int> ans; bool vis[maxn]={false}; vector<node>adj[maxn]; int G[maxn][maxn]; void BFS(int l,int id,int &num) { vis[id]=true; queue<node> q; node temp; temp.id=id; temp.layer=0; q.push(temp); while(!q.empty()) { temp=q.front(); q.pop(); int u=temp.id; for(int i=0;i<adj[u].size();i++) { node v=adj[u][i]; v.layer=temp.layer+1; if(v.layer<=l&&vis[v.id]==false) { q.push(v); vis[v.id]=true; num++; } } } } int main() { int n,l,num,id,k; node user; cin>>n>>l; for(int i=1;i<=n;i++) { user.id=i; scanf("%d",&num); for(int j=1;j<=num;j++) { scanf("%d",&id); adj[id].push_back(user); } } cin>>k; for(int i=0;i<k;i++) { memset(vis,false,maxn); scanf("%d",&id); num=0; BFS(l,id,num); ans.push_back(num); } for(int i=0;i<ans.size();i++) { printf("%d\n",ans[i]); } }