1076 Forwards on Weibo (30分)
1076
分析:
C++:
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1010;
struct Node {
int id;
int layer;
};
vector<Node> G[maxn];
bool inq[maxn];
int n, l;
int bfs(int index) {
int forwardNum = 0;
queue<Node> q;
Node start;
start.id = index;
start.layer = 0;
q.push(start);
inq[start.id] = true;
while (!q.empty()) {
Node frontNode = q.front();
q.pop();
int front = frontNode.id;
for (int i = 0; i < G[front].size(); i++) {
Node nextNode = G[front][i];
nextNode.layer = frontNode.layer + 1;
if (inq[nextNode.id] == false && nextNode.layer <= l) {
q.push(nextNode);
inq[nextNode.id] = true;
forwardNum++;
}
}
}
return forwardNum;
}
int main() {
Node user;
scanf("%d%d", &n, &l);
int followNum, followId;
for (int i = 1; i <= n; i++) {
user.id = i;
scanf("%d", &followNum);
for (int j = 0; j < followNum; j++) {
scanf("%d", &followId);
G[followId].push_back(user);
}
}
int queryNum, s;
scanf("%d", &queryNum);
for (int i = 0; i < queryNum; i++) {
memset(inq, false, sizeof(inq));
scanf("%d", &s);
int forwardNum = bfs(s);
printf("%d\n", forwardNum);
}
return 0;
}
网友评论