题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805392092020736

这题基本是自己写的,BFS还是相对熟悉,但还是有遗忘的情况,事实证明不复习绝对凉凉,注意点是邻接表可以设置成Node型的

代码

  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<algorithm>
  5. #include<cstdio>
  6. using namespace std;
  7. const int maxn = 1010;
  8. vector<int> G[maxn];
  9. bool inq[maxn] = {false};
  10. struct Node{
  11. int data, depth;
  12. };
  13. int n, m, l, k;
  14. int BFS(int data){
  15. Node node;
  16. node.data = data;
  17. node.depth = 0;
  18. queue<Node> q;
  19. q.push(node);
  20. inq[node.data] = true;
  21. int num = 0;
  22. while(!q.empty()){
  23. Node top = q.front();
  24. q.pop();
  25. for(int i = 0; i < G[top.data].size(); i++){
  26. Node next;
  27. next.data = G[top.data][i];
  28. next.depth = top.depth + 1;
  29. if(next.depth <= l && inq[G[top.data][i]] == false){
  30. inq[G[top.data][i]] = true;
  31. q.push(next);
  32. num++;
  33. }
  34. }
  35. }
  36. return num;
  37. }
  38. int main(){
  39. int follower, user_id;
  40. scanf("%d%d", &n, &l);
  41. for(int i = 1; i <= n; i++){
  42. scanf("%d", &m);
  43. for(int j = 0; j < m; j++){
  44. scanf("%d", &follower);
  45. G[follower].push_back(i);
  46. }
  47. }
  48. scanf("%d", &k);
  49. for(int i = 0; i < k; i++){
  50. fill(inq, inq + maxn, false);
  51. scanf("%d", &user_id);
  52. int result = BFS(user_id);
  53. printf("%d\n", result);
  54. }
  55. }