Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may follow many other users as well. Hence a social network is formed with followers relations. When a user makes a post on Weibo, all his/her followers can view and forward his/her post, which can then be forwarded again by their followers. Now given a social network, you are supposed to calculate the maximum potential amount of forwards for any specific user, assuming that only L levels of indirect followers are counted.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive integers: N (<=1000), the number of users; and L (<=6), the number of levels of indirect followers that are counted. Hence it is assumed that all the users are numbered from 1 to N. Then N lines follow, each in the format:

M[i] user_list[i]

where M[i] (<=100) is the total number of people that user[i] follows; and user_list[i] is a list of the M[i] users that are followed by user[i]. It is guaranteed that no one can follow oneself. All the numbers are separated by a space.

Then finally a positive K is given, followed by K UserID's for query.

Output Specification:

For each UserID, you are supposed to print in one line the maximum potential amount of forwards this user can triger, assuming that everyone who can view the initial post will forward it once, and that only L levels of indirect followers are counted.

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
 #include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef struct NODE{
int data, layer;
}node;
vector<node> G[];
int visit[];
int N, L, K, Mi;
int bfs(int vt){
int cnt = -;
node first = {vt, };
visit[vt] = ;
queue<node> Q;
Q.push(first);
while(Q.empty() == false){
node temp = Q.front();
Q.pop();
cnt++;
int len = G[temp.data].size();
if(temp.layer < L){
for(int i = ; i < len; i++){
if(visit[G[temp.data][i].data] == ){
visit[G[temp.data][i].data] = ;
G[temp.data][i].layer = temp.layer + ;
Q.push(G[temp.data][i]);
}
}
}
}
return cnt;
}
int main(){
scanf("%d%d", &N, &L);
for(int i = ; i <= N; i++){
scanf("%d", &Mi);
for(int j = ; j < Mi; j++){
int temp;
scanf("%d", &temp);
node nd = {i, };
G[temp].push_back(nd);
}
}
scanf("%d", &K);
int vt, ans;
for(int i = ; i < K; i++){
for(int j = ; j < ; j++)
visit[j] = ;
scanf("%d", &vt);
ans = bfs(vt);
printf("%d\n", ans);
}
cin >> N;
return ;
}

总结:

1、题意:求据距离点A的距离不超过L的节点的个数(A本身不计入)。

2、bfs的visit数组记录的是是否曾加入过队列,而非是否被访问。

3、本题是有向图,最好用邻接表存储。此外,题目给出的数据是A关注的人的列表,而微博消息应该是从关注列表里的人到A的方向,注意不要弄错图的边。

4、由于dfs的原则是访问过的节点就不再访问,所以求得的节点有可能不是最短的转发距离,从而有可能漏掉一些情况。如图,当使用深搜,L = 2。从A开始,A->B->C,距离达到了2开始回溯到A,而由于C已被visit标记,所以无法再次被访问,D距离A也是2但却被遗漏。

A1076. Forwards on Weibo的更多相关文章

  1. PAT A1076 Forwards on Weibo (30 分)——图的bfs

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  2. PAT甲级——A1076 Forwards on Weibo

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  3. PAT_A1076#Forwards on Weibo

    Source: PAT A1076 Forwards on Weibo (30 分) Description: Weibo is known as the Chinese version of Twi ...

  4. 1076 Forwards on Weibo (30 分)

    1076 Forwards on Weibo (30 分) Weibo is known as the Chinese version of Twitter. One user on Weibo ma ...

  5. PAT 1076 Forwards on Weibo[BFS][一般]

    1076 Forwards on Weibo (30)(30 分) Weibo is known as the Chinese version of Twitter. One user on Weib ...

  6. PAT甲级1076. Forwards on Weibo

    PAT甲级1076. Forwards on Weibo 题意: 微博被称为中文版的Twitter.微博上的一位用户可能会有很多关注者,也可能会跟随许多其他用户.因此,社会网络与追随者的关系形成.当用 ...

  7. 1076. Forwards on Weibo (30)【树+搜索】——PAT (Advanced Level) Practise

    题目信息 1076. Forwards on Weibo (30) 时间限制3000 ms 内存限制65536 kB 代码长度限制16000 B Weibo is known as the Chine ...

  8. PAT 甲级 1076 Forwards on Weibo (30分)(bfs较简单)

    1076 Forwards on Weibo (30分)   Weibo is known as the Chinese version of Twitter. One user on Weibo m ...

  9. 1076. Forwards on Weibo (30)

    时间限制 3000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Weibo is known as the Chinese v ...

随机推荐

  1. java随笔5 完整路径的应用

    不仅类,函数,甚至参数都可以获取完整路径

  2. servlet ServletContext

    一.Servlet简介 1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是 ...

  3. C# Note5:使用相对路径读取文件

    一.C#中使用相对路径读取配置文件 一般Solution的目录结构如下图所示: (如过看不到某些文件,可以点击 “显示所有文件” 图标) 方法一:由于生成的exe文件在bin\debug目录下,可以使 ...

  4. python爬虫scrapy之登录知乎

    下面我们看看用scrapy模拟登录的基本写法: 注意:我们经常调试代码的时候基本都用chrome浏览器,但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码,误导我以为登录时不需要验证码,其实 ...

  5. tornado web框架简介

    https://www.cnblogs.com/aylin/p/5702994.html

  6. vue axios 封装(二)

    封装二: http.js import axios from 'axios' import storeHelper from './localstorageHelper' // 全局设置 const ...

  7. environment variable

    %ALLUSERSPROFILE% C:\ProgramData %APPDATA% C:\Users\cuthead\AppData\Roaming %COMMONPROGRAMFILES% C:\ ...

  8. 数据库MySQL5.7.21win64位安装配置

    1,在MySQL官网下载mysql对应版本 https://dev.mysql.com/downloads/mysql/ 2,解压压缩文件到想要的位置 3,配置环境 打开  右键我的电脑-->属 ...

  9. Qt 使用openGL 渲染NV12格式的视频

    直接上代码 Nv12Render.h #ifndef NV12RENDER_H #define NV12RENDER_H #include <QOpenGLFunctions> #incl ...

  10. 了解AutoCAD对象层次结构 —— 4 —— 符号表

    上一小节我们看到了符号表包含了一系列的表(共9个),这些表数量是固定的,用户不能增加新的表,也不能删除现有的表. 符号表名称 符号表功能 Block Table 块表 存储图形数据库中定义的块.此表中 ...