1. 程式人生 > >PAT (Advanced Level) Practice 1076 Forwards on Weibo (30 分)

PAT (Advanced Level) Practice 1076 Forwards on Weibo (30 分)

因為level在1到L層內的都需要計數,所以用bfs,一開始用dfs,發現有些遠的點被提前遍歷到了,導致有更短的路徑時會忽略這個節點,導致答案錯誤,而bfs每次都是先遍歷距離最短的點,所以這個錯誤就不會出現了。

#include<cstdio>
#include<vector>
#include<queue>
using namespace std;

const int N=1e3+5;

struct Node
{
    int u,dis;
};

int n,l,now,vis[N];
vector<int> G[N];
int bfs(int s) { queue<Node> q; q.push({s,0}); vis[s]=now; int cnt=0; while(!q.empty()) { Node u=q.front(); q.pop(); if(u.dis>=1) cnt++; for(int i=0;i<G[u.u].size();i++) { int v=G[u.u][i]; if(vis[v]==now)
continue; vis[v]=now; if(u.dis+1<=l) q.push({v,u.dis+1}); } } return cnt; } int main() { scanf("%d%d",&n,&l); for(int i=1;i<=n;i++) { int m;scanf("%d",&m); while(m--) { int x;scanf("%d",&x)
; G[x].push_back(i); } } int q;scanf("%d",&q); now=0; while(q--) { now++; int x;scanf("%d",&x); printf("%d\n",bfs(x)); } return 0; }