[PAT-A 1076]Forwards on Weibo

在这里插入图片描述

题目大意:
一个用户发布一条信息,他的关注这就可以看到这条信息并且选择是否转发,同一用户最多转发一次,信息发布者不会转发
给出n个用户的关注情况,以及他们关注了那些用户,以及一个转发上限L,应给出最初发布消息的用户编号,查询在转发层数内消息有多少会被转发

思路:
建立图,X关注了Y,建立Y->X的有向边,表示Y发布的消息可以传到X并被X转发。
如样例输入中第二行 3234代表节点1关注了2,3,4即2,3,4发微博1可以转发,即234的邻接表项中加入1。
使用BFS带层次节点遍历,控制遍历的层次在给定的层次之内
这种需要控制层数的尽量用bfs,dfs容易超时。

AC代码

//PAT_A 1076
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1010;
struct Node {
	int id;
	int layer;
};
vector<Node> Adj[maxn];//邻接表
bool inq[maxn] = { false };
int bfs(int s, int L) {
	int numForward = 0;//转发数
	queue<Node> q;
	Node start{ s,0 };
	q.push(start);
	inq[start.id] = true;
	while (!q.empty()) {
		Node topNode = q.front();
		q.pop();
		int u = topNode.id;
		for (int i = 0; i < Adj[u].size(); i++) {
			Node next = Adj[u][i];
			next.layer = topNode.layer + 1;
			if (inq[next.id] == false && next.layer <= L){
				q.push(next);
				inq[next.id] = true;
				numForward++;
			}
		}
	}
	return numForward;
}
int main() {
	Node user;
	int n, L, numFollow, idFollow;
	(void)scanf("%d %d", &n, &L);
	for (int i = 1; i <= n; i++) {
		user.id = i;
		(void)scanf("%d", &numFollow);
		for (int k = 0; k < numFollow; k++) {//建立idFollow->user的边
			(void)scanf("%d", &idFollow);
			Adj[idFollow].push_back(user);
		}
	}
	int numQuery, s;
	(void)scanf("%d", &numQuery);
	for (int i = 0; i < numQuery; i++) {
		fill(inq, inq + maxn, false);
		(void)scanf("%d", &s);
		int numForward = bfs(s, L);
		printf("%d\n", numForward);
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
See the 'Note about fast-forwards' in 'git push --help' for details是在git push命令的帮助文档中提到的一条注意事项。[1] 这个提示是关于在使用git push命令时可能出现的一种错误情况,即推送失败,提示"non-fast-forward"。 这种情况通常是因为你当前分支的最新提交落后于远程分支的提交,需要先合并远程分支的更改(例如使用git pull命令),然后再次尝试推送。如果想要了解更多关于fast-forward的详细信息,可以参考git push的帮助文档中的相关说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【git push报错】:See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details](https://blog.csdn.net/scorpio_j/article/details/114756383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [git 无法push远程仓库 Note about fast-forwards 问题解决](https://blog.csdn.net/weixin_42596434/article/details/88759295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值