首页 > 其他分享 >bfs: 通过利用其它点到出发点的距离 来表示bfs的层数

bfs: 通过利用其它点到出发点的距离 来表示bfs的层数

时间:2023-03-03 10:00:48浏览次数:41  
标签:dist int 用户 st bfs 关注 层数 点到

题目:
微博被称为中文版的 Twitter。

微博上的用户既可能有很多关注者,也可能关注很多其他用户。

因此,形成了一种基于这些关注关系的社交网络。

当用户在微博上发布帖子时,他/她的所有关注者都可以查看并转发他/她的帖子,然后这些人的关注者可以对内容再次转发…

现在给定一个社交网络,假设只考虑 LL 层关注者,请你计算某些用户的帖子的最大可能转发量。

补充
如果 BB 是 AA 的关注者,CC 是 BB 的关注者,那么 AA 的第一层关注者是 BB,第二层关注者是 CC。

输入格式
第一行包含两个整数,NN 表示用户数量,LL 表示需要考虑的关注者的层数。

假设,所有的用户的编号为 1∼N1∼N。

接下来 NN 行,每行包含一个用户的关注信息,格式如下:

M[i] user_list[i]
M[i] 是第 ii 名用户关注的总人数,user_list[i] 是第 ii 名用户关注的 M[i] 个用户的编号列表。

最后一行首先包含一个整数 KK,表示询问次数,然后包含 KK 个用户编号,表示询问这些人的帖子的最大可能转发量。

输出格式
按顺序,每行输出一个被询问人的帖子最大可能转发量。

假设每名用户初次看到帖子时,都会转发帖子,只考虑 LL 层关注者。

数据范围
1≤N≤10001≤N≤1000,
1≤L≤61≤L≤6,
1≤M[i]≤1001≤M[i]≤100,
1≤K≤N

本题 关键是掌握层数要小于等于l

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e4+10,M = 1e6+10;
int q[N];
int e[M],ne[M],h[N],idx;
int dist[N];
bool st[N];
int n,l;
void add(int a,int b)
{
    e[idx] = b,ne[idx] = h[a],h[a] = idx++;
}

int bfs(int u)
{
    memset(st,0,sizeof st);
    memset(dist,0,sizeof dist);
    int hh = 0,tt=0;
    q[0] = u;
    st[u] = true;
    int cnt = 0;
    int res= 0;
    while(hh<=tt)
    {
        int t=q[hh++];
        if(dist[t]>l) return res;
        for(int i = h[t];~i;i=ne[i])
        {
            int j= e[i];
            if(st[j]) continue;
            dist[j] = dist[t]+1;
            if(dist[j]<=l) res++;
             q[++tt] = j;
             st[j] =  true;
        }
    }
    return res;
    
}
int main()
{
    scanf("%d%d",&n,&l);
    memset(h,-1,sizeof h);
    for(int i = 1; i<=n;i++)
    {
        int cnt;
        scanf("%d",&cnt);
        while(cnt--)
        {
            int id;
            scanf("%d",&id);
            add(id,i);
        }
    }
    
    int k;
    scanf("%d",&k);
    while(k--)
    {
        int a;
        scanf("%d",&a);
        printf("%d\n",bfs(a));
    }
    return 0;
}

标签:dist,int,用户,st,bfs,关注,层数,点到
From: https://www.cnblogs.com/freshman666/p/17174537.html

相关文章

  • DFS和BFS理解+模板+例题
    DFS和BFS理解+模板+例题DFS(深度优先搜索)本质上是暴力把所有的路径都搜索出来,它运用了回溯,保存这次的位置并深入搜索,都搜索完便回溯回来,搜下一个位置,直到把所有最深位置都......
  • DFS和BFS理解+模板+例题
    DFS和BFS理解+模板+例题DFS(深度优先搜索)本质上是暴力把所有的路径都搜索出来,它运用了回溯,保存这次的位置并深入搜索,都搜索完便回溯回来,搜下一个位置,直到把所有最深位置都......
  • bfs详解
    bfs详解1,bfs的基本概念bfs是广度优先搜索,是一种对树形结构的遍历,他的思想是先选定一个点,从这个点出发,每次只走一步,分为四个方向,直到找到正确答案,相较于dfs的直接递归,bfs......
  • 考研算法辅导课笔记:第十四章--模拟,递推,bfs
    这节课完全是上机题,机试内容。想要保持排名靠前吗?那就多在上面投入时间,一般来说投入时间与排名成正比模拟题先讲一下做过的题目类型。比如说dfs,dp,贪心,从一堆方案中涨到......
  • E. Nearest Opposite Parity(多源最短路bfs)
    题目NearestOppositeParity(多源最短路bfs)题意思路多源最短路代码constintN=2e5+10;inta[N];vector<int>edge[N];intdist[N];intans[N];voidbf......
  • Not Sitting (CF2B) (构造找规律bfs/从整体所有情况入手)
      思路::第一种就是找规律利用bfs解决另一种用求所有情况入手:发现Rahul一定会到说有点,然后Tian一定是在4个角落中的其中一个, 于是暴力枚举每一个情况,然......
  • BFS
    能解决什么问题走迷宫问题代码#include<queue>typedefpair<int,int>PII;intn,m;PIIstart;intres;boolused[N][N];intdx[]={0,0,1,-1},dy[]={......
  • 极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数
    文章持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+......
  • hashMap的底层数据结构
    本节用于记录JavaHashMap底层数据结构、方法实现原理等,基于JDK1.8。#底层数据结构JavahashMap是采用哈希表结构的(数组+链表/jdk8后加入红黑树)实现,结合了数组和链表......
  • 7-13 肿瘤诊断 (30 分)【 BFS 】
    7-13 肿瘤诊断 (30 分)在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。输入格式:输入第一行给出4个正整......