PAT A1076 Forwards on Weibo (30 分)

在这里插入图片描述
用BFS搜索一遍图,同时记录下每个结点的层数以及转发数
在这里插入图片描述

#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

struct Node{
    
    
	int v;
	int layer;
}node[1100];

int n, k;
bool visited[1100]; 
int max_num[1100];
vector<Node> adj[1100];

void init(){
    
    
	for(int i=0; i<1100; i++){
    
    
		visited[i] = false;
	}
}

int BFS(int index){
    
    
	queue<int> q;
	q.push(index);
	visited[index] = true;
	node[index].layer = 0;
	int num = 0;
	while(!q.empty()){
    
    
		int temp = q.front();
		q.pop();
		if(node[temp].layer == k) return num;
		for(int i=0; i<adj[temp].size(); i++){
    
    
			int t = adj[temp][i].v;
			if(!visited[t]){
    
    
				q.push(t);
				visited[t] = true;
				node[t].layer = node[temp].layer + 1;
				if(node[t].layer <= k){
    
    
					num++;
				}
			}
		}
	}
	return num;
}

int main(){
    
    
	scanf("%d %d", &n, &k);
	for(int i=1; i<=n; i++){
    
    
		int num;
		Node temp;
		temp.v = i;
		scanf("%d", &num);
		for(int j=0; j<num; j++){
    
    
			int bh;
			scanf("%d", &bh);
			adj[bh].push_back(temp);
		}
	}
	
	for(int i=1; i<=n; i++){
    
    
		init();
		max_num[i] = BFS(i);
	}
	
	int m;
	scanf("%d", &m);
	for(int i=0; i<m; i++){
    
    
		int ans;
		scanf("%d", &ans);
		printf("%d\n", max_num[ans]);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45964844/article/details/113737247
今日推荐