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

Posted freshman666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bfs: 通过利用其它点到出发点的距离 来表示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;

以上是关于bfs: 通过利用其它点到出发点的距离 来表示bfs的层数的主要内容,如果未能解决你的问题,请参考以下文章

UVA - 10410 Tree Reconstruction(栈处理递归)

bzoj2035: [2009国家集训队]数据读取问题

BFS 使用不正确

UVALive - 6455 Stealing Harry Potter's Precious (bfs+dfs)

UVa 1599 理想路径(反向BFS 求最短路径 )

点到平面距离公式是啥?