PAT_甲级_1076 Forwards on Weibo (30point(s)) (C++)【BFS/微博扩散】
目录
1,题目描述
题目描述
输入
2,思路
BFS算法
3,AC代码
4,解题过程
第一搏
第二搏
1,题目描述
Sample Input:
7 3
3 2 3 4
0
2 5 6
2 3 1
2 3 4
1 4
1 5
2 2 6
Sample Output:
4
5
题目描述
一个人的微博可以被许多人转发,给出每个粉丝关注的人(形成联系网络),限定间接转发的次数,输出最大转发数。
输入
- 第一行:N总人数,L限制层数;
- N行:每个粉丝关注的人;(不要搞混了!!!)
- 最后一行:K查询的数目,查询的编号;
2,思路
典型的BFS算法,需要注意记录每个节点所在的层数。
BFS算法
- 声明队列q;设置初始阶段u已访问visited[u]=true;int [level]记录层数;bool visited[]判断节点是否已访问;
- 将初始节点u入队;
- 当队列不为空时:1)队列头结点出队,并记录为u;2)遍历所有与u相邻、未被访问且u节点层次小于L的节点v,将其入队,设置已访问,更新节点v层次;
3,AC代码
参考这位大神的代码,解题过程中有大帮助!膜!@日沉云起【pat甲级1076. Forwards on Weibo (30)——BFS+DFS】
#include<bits/stdc++.h>
using namespace std;
int N, L, K; //N用户数目 L传递层数 K查询数目
vector<int> graph[1002]; //有向图 存放消息的传播路径int bfs(int u){int amount = 0; //传递的数量int level[N + 1] = {0}; //记录每个节点的层次bool visited[N + 1] = {false};queue<int> q;q.push(u);visited[u] = true;while(!q.empty()){u = q.front();q.pop();for(auto v : graph[u]){if(!visited[v] && level[u] < L){amount++;visited[v] = true;level[v] = level[u] + 1; //节点v比节点u层数加一q.push(v);}}}return amount;
}
int main(){
#ifdef ONLINE_JUDGE
#elsefreopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGEscanf("%d %d", &N, &L);int num, id;for(int i = 1; i <= N; i++){ //编号从1开始scanf("%d", &num);for(int j = 0; j < num; j++){scanf("%d", &id);graph[id].push_back(i); //信息可以从id流向i}}scanf("%d", &num);for(int i = 0; i < num; i++){scanf("%d", &id);printf("%d\n", bfs(id));}return 0;
}
4,解题过程
第一搏
一看,这不就是有向图的DFS遍历(因为用DFS的次数比较多,形成了定势思维)吗?看我分分钟KO。。。
#include<bits/stdc++.h>
using namespace std;
int N, L, K;//N用户数目 L传递层数 K查询数目
bool graph[1002][1002];//有向图 存放消息的传播路径
bool visited[1002];
int amount;//传递的数量void dfs(int start, int depth){if(depth > L) return;visited[start] = true;amount++;for(int i = 1; i <= N && depth < L; i++){if(visited[i] == false && graph[start][i] == true)dfs(i, depth + 1);}
}
int main(){
#ifdef ONLINE_JUDGE
#elsefreopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGEscanf("%d %d", &N, &L);int num, id;for(int i = 1; i <= N; i++){//编号从1开始scanf("%d", &num);for(int j = 0; j < num; j++){scanf("%d", &id);graph[id][i] = true;//信息可以从id流向i}}scanf("%d", &num);for(int i = 0; i < num; i++){scanf("%d", &id);fill(visited, visited + 1002, false);amount = -1;//将自己也加进去了 需要减一dfs(id, 0);cout<<amount<<endl;}return 0;
}
第二搏
Too young,too simple !
使用DFS会有一个隐蔽的错误:参考@日沉云起【pat甲级1076. Forwards on Weibo (30)——BFS+DFS】先膜为敬!
看到这里,果断弃坑,加入BFS阵营!
PAT_甲级_1076 Forwards on Weibo (30point(s)) (C++)【BFS/微博扩散】相关推荐
- PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...
- PAT A级 1076 Forwards on Weibo (超详细BFS做法)
一切杀不死我的,都将使我强大! 1076 Forwards on Weibo(30 分) Weibo is known as the Chinese version of Twitter. One u ...
- PAT甲级1124 Raffle for Weibo Followers :[C++题解]哈希表、微博转发抽奖
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:开一个哈希表存已经中将的用户,避免重复发奖. 遍历所有m条姓名,从第一个中奖的开始,依次模拟即可. ac代码 #include< ...
- *PAT_甲级_1072 Gas Station (30point(s)) (C++)【Dijkstra/字符串截取/与数字相互转换】
目录 1,题目描述 题目大意 注意: 2,思路 数据结构 算法 3,AC代码 4,解题过程 第一搏 第二搏 1,题目描述 Sample Input 1: 4 3 11 5 1 2 2 1 4 2 1 ...
- 【PAT甲级 - C++题解】1076 Forwards on Weibo
✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
- PAT_甲级 简单模拟
A1006 Sign In and Sign Out (25) 简单模拟 原题 At the beginning of every day, the first person who signs in ...
- 1076 Forwards on Weibo
1. 这题说的是,微博上人们之间有关注和被关注的关系,如果一个人发博,他的追随者就可能转发,追随者的追随者又可能转发,以此类推.现在给定一个人,求其微博可能被转发的人数,但是注意有一个关注链长的上限, ...
- **PAT_甲级_1057 Stack (30分) (C++)【字符串处理/栈的模拟/树状数组】
目录 1,题目描述 题目大意 2,思路 数据结构 函数讲解 1,void update(int x, int v): 2,int getsum(int x): 3,void PeekMedian(): ...
- PAT_甲级_1002_C语言
#include<stdio.h> #include<stdbool.h> int main() {int k , n;//数据个数以及下标数double a;//键入的数值d ...
最新文章
- html switch开关实现隐藏,css3实现switch开关效果
- java中hello类,Java入门篇-hello world
- model.train()和model.eval()
- 爬虫数据库一些简单的设计逻辑
- 计算机基础视频教程百度云,计算机应用基础视频教程
- 非标自动化PLC编程设计
- excel表转成PDF文档
- 计算机技术与软件专业技术资格(水平)考试
- linux下安装虚拟天文馆,如何在Ubuntu 18.04/17.10/16.04中安装Stellarium 0.17.0 虚拟天文馆...
- 20201227英语单词学习(仅供自己记录)
- 升压电路(Boost)的设计原理、参数计算及MATLAB仿真
- 华为ensp防火墙nat64案例配置
- 阿里巴巴计划今日中午推出1688.com批发网
- Mac本子下安装Maven的插件
- [Digital IC]RFID文献笔记
- Keil C51与MDK的合并
- 担心侵权?必备无版权素材网站分享,不用担心视频剪辑缺素材
- (三)Windows Server 2008 R2 无网卡驱动
- Learning Objectives
- emqx 使用端口_MQTT开发(一)-------EMQX Broker配置
热门文章
- 没有解决方案,不要瞎提建议
- 复古编程 cmd 编译 环境变量 可执行文件 path
- 面试官的哪些举动,暗示你将要通过?
- Python如何制作个性化的动态二维码
- 不缅怀C语言之父的果粉都不是真果粉
- c语言课设报告仓库管理系统,c语言课设仓库管理系统.doc
- 【杂项】任务管理器中的文件资源管理器不小心给结束任务了
- 计算机原理pcb板图,PCB电路板的电路原理图是什么
- 【多式联运】基于matlab帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题【含Matlab源码 2073期】
- java简单表白的情话_感动的表白情话 简单表白的话