1076 Forwards on Weibo (30 分)(***)

#include <cstdio>
#include <queue>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
const int maxv = 2011,inf = 1<<30;

struct node
{
    int data;
    int lay;
};

int G[maxv][maxv] = {0},n,l;
bool vis[maxv] = {false};
int Bfs(int uid)
{
    node topN;
    topN.data = uid;
    topN.lay = 0;
    int ans = 0;
    queue<node>q;
    q.push(topN);
    vis[uid] = true;
    while(!q.empty())
    {
        node s = q.front();
        q.pop();
//        vis[s] = true;
//        if(layer > l)
//            break;
        for(int i = 1;i<=n;i++)
        {
            if(G[s.data][i] == 1 && vis[i] == false && s.lay < l)
            {
                vis[i] = true;
                ans++;
                node t;
                t.data = i;
                t.lay = s.lay + 1;
                q.push(t);
            }
        }

    }
    return ans;
}

int main()
{
    freopen("1.txt","r",stdin);
    scanf("%d%d",&n,&l);
    for(int i = 1;i<=n;i++)
    {
        int t;
        scanf("%d",&t);
        for(int j=0;j<t;j++)
        {
            int fid;
            scanf("%d",&fid);
//            G[i][fid] = 1;
            G[fid][i] = 1;
        }
    }
    int k;
    scanf("%d",&k);
    for(int i=0;i<k;i++)
    {
        fill(vis,vis+maxv,0);
        int uid;
        scanf("%d",&uid);
        printf("%d\n",Bfs(uid));
    }

    return 0;
}

发布了111 篇原创文章 · 获赞 4 · 访问量 3204

猜你喜欢

转载自blog.csdn.net/qq_15556537/article/details/101176536