PAT Advanced Level 1076. Forwards on Weibo (30)
来源:互联网 发布:学校网关闭游戏端口 编辑:程序博客网 时间:2024/06/02 06:37
【来源】
1076. Forwards on Weibo (30)
【分析】
本题给出微博用户的关注情况,在假定某一用户的粉丝看到某条微博一定会转发的情况下,求可能被转发的次数。
抽象一下就是一个限定了层数的广度优先搜索(BFS)。
基本的数据结构是以vector为元素类型的一个vector。该vector的index和用户id相关,index所对应的元素为此id的粉丝们。
给定发微博的用户以后,先设定除博主之外的所有用户都没有转发。然后用一个队列来进行BFS,出队时将此用户的转发设置为True。遍历完毕之后统计标记为True的用户的数量,输出即可。
为了统计搜索的层数,每次搜索之前我们把队列中的最后一个元素记录下来,为endofLevel 变量。每当我们发现出队的元素为endofLevel时,表明一层遍历的结束,然后更新endofLevel的值并将层数加1。当层数达到所限定的层数L时,停止搜索即可。
【代码】
#include <iostream>#include <cstdio>#include <vector>#include <deque>using namespace std;int main(){ int N, L; scanf("%d%d", &N, &L); vector<vector<int>> fans(N); for (int i = 0; i < N; ++i){ int num; scanf("%d", &num); for (int j = 0; j < num; ++j){ int followee; scanf("%d", &followee); fans[followee-1].push_back(i); } } int K; scanf("%d", &K); for (int i = 0; i < K; ++i){ bool* hasfoward = new bool[N]; for (int i = 0; i < N; ++i){ hasfoward[i] = false; } int blogger; scanf("%d", &blogger); hasfoward[blogger - 1] = true; deque<int> queue; queue.push_back(blogger - 1); int currentlevel = 0; int last = blogger - 1; int endOfLevel = queue.back(); while (!queue.empty()){ int front = queue.front(); queue.pop_front(); hasfoward[front] = true; for (int j = 0; j < fans[front].size(); ++j){ if (!hasfoward[fans[front][j]]){ queue.push_back(fans[front][j]); hasfoward[fans[front][j]] = true; } } if (front == endOfLevel) { endOfLevel = queue.back(); ++currentlevel; } if (currentlevel >= L){ break; } } int fowards = 0; for (int i = 0; i < N; ++i){ if (hasfoward[i]){ ++fowards; } } printf("%d\n", fowards-1); delete[] hasfoward; } system("pause"); return 0;}【点评】
此题考察BFS的应用,以及BFS层数计数问题。注意记录下某一用户的粉丝,而不是像题目给出的那样记录关注的人,这样搜索起来会很方便。
0 0
- PAT Advanced Level 1076. Forwards on Weibo (30)
- 【PAT】【Advanced Level】1076. Forwards on Weibo (30)
- PAT (Advanced) 1076. Forwards on Weibo (30)
- PAT (Advanced Level) Practise 1076 Forwards on Weibo (30)
- PAT (Advanced Level) Practise 1076 Forwards on Weibo (30)
- PAT (Advanced Level) 1076. Forwards on Weibo (30) 微博转发 BFS
- 1076. Forwards on Weibo (30)【树+搜索】——PAT (Advanced Level) Practise
- Pat(Advanced Level)Practice--1076(Forwards on Weibo)
- PAT A 1076. Forwards on Weibo (30)
- PAT-1076. Forwards on Weibo (30)
- pat 1076. Forwards on Weibo (30)
- PAT 1076. Forwards on Weibo (30)
- PAT 1076. Forwards on Weibo (30)
- PAT 1076. Forwards on Weibo (30)
- 【PAT】 1076. Forwards on Weibo (30)
- 1076. Forwards on Weibo (30) PAT
- PAT(A) - 1076. Forwards on Weibo (30)
- 1076. Forwards on Weibo (30) PAT 甲级
- 【类】项目四。三个长方体
- 时间和时间戳的相互转换方法分享
- java中的类!
- 日志切割清理工具 Log-Cutter
- Varnish 安装搭建配置缓存服务器
- PAT Advanced Level 1076. Forwards on Weibo (30)
- NYOJ891 找点
- 语法文件解释器及编译器代码生成
- android中的触控
- Java details-java虚拟机的两种线程
- 笔记
- CSS3模糊滤镜
- 7-.netRemoting
- 数组的下标是真正的指针运算