题目
 
 
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;
}