【PAT】A1076 Forwards on Weibo (30分)

tech2024-06-16  70

题目

post n. 岗位;邮件;标杆 vt. 张贴;公布;邮递;布置

解决

思路

建图的时候,根据样例,可以认识到应该是被关注者指向关注者,建立邻接表。注意: 每一次BFS之前,需要初始化inq[MAXV]数组

实现

Code1

#include<cstdio> #include<queue> #include<vector> using namespace std; const int MAXV = 1010; struct Node{ int id; int layer; }; vector<Node> Adj[MAXV]; bool inq[MAXV] = {false}; void inqInit(){ for(int i=0; i<MAXV; i++){ inq[i] = false; } } int BFS(int s, int L){ int cnt = 0; queue<Node> q; Node node; node.id = s; node.layer = 0; q.push(node); inq[node.id] = true; while(!q.empty()){ Node top = q.front(); q.pop(); int u = top.id; for(int i=0; i<Adj[u].size(); i++){ Node next = Adj[u][i]; next.layer = top.layer + 1; if(inq[next.id] == false && next.layer <= L){ q.push(next); inq[next.id] = true; cnt++; } } } return cnt; } int main(){ int n, L; scanf("%d%d", &n, &L); Node user; int k, idFollow; for(int i=1; i<=n; i++){ // user[i]:1~N user.id = i; scanf("%d", &k); //i关注的人数 for(int j=0; j<k; j++){ scanf("%d", &idFollow); Adj[idFollow].push_back(user); // 被关注者->用户i,被关注的人的微博可以被i看到 } } int numQuery, s; scanf("%d", &numQuery); for(int i=0; i<numQuery; i++){ inqInit(); scanf("%d", &s); int ans = BFS(s, L); printf("%d\n", ans); } return 0; }
最新回复(0)