PAT.A1076 Forwards on Weibo

返回目录在这里插入图片描述

题意

在微博中,每个用户都可能被若干其他用户关注。而当该用户发布一条信息时, 他的关注者就可以看到这条信息并选择是否转发它,且转发的信息也可以被转发者的关注者再次转发,但同一用户最多只转发该信息一次(信息的最初发布者不能转发该信息)。现在给出N个用户的关注情况(即他们各自关注了哪些用户)以及一一个转发层数上限L,并给出最初发布消息的用户编号,求在转发层数上限内消息最多会被多少用户转发。

样例(可复制)

7 3
3 2 3 4
0
2 5 6
2 3 1
2 3 4
1 4
1 5
2 2 6
//output
4
5

注意点

  1. 本题使用BFS更方便
  2. 编号从1开始编号,1-n
  3. 注意使用数组进行标记节点是否被访问过了,防止重复访问
  4. 本题使用两个queue,deep用来存储当前节点的深度depth
#include <bits/stdc++.h>
using namespace std;

vector<int> G[1010];
bool flag[1010];//标记是否访问过
int n,l,k;//节点数n,层数上限l
void BFS(int root,int& num){
	flag[root]=true;
	queue<int> q,deep;
	q.push(root);
	deep.push(0);
	while(!q.empty()){
		int now=q.front(),depth=deep.front();
		q.pop();
		deep.pop();
		if(depth<=l){
			num++;
			for(int i:G[now]){
				if(!flag[i]){
					q.push(i);
					deep.push(depth+1);
                    flag[i]=true;
				}
			}
		}
	}
}
int main(){
	cin>>n>>l;
	for(int i=1;i<=n;i++){
		scanf("%d",&k);
		int t;
		while(k--){
			scanf("%d",&t);
			G[t].push_back(i);
		}
	}
	cin>>k;//k次查询
	while(k--){
		memset(flag,false,sizeof(flag));
		int root,num=0;
		scanf("%d",&root);
		BFS(root,num);
		cout<<num-1<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽会微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值