1076. Forwards on Weibo (30)

来源:互联网 发布:python和java和php 编辑:程序博客网 时间:2024/05/14 10:16

传送门:https://www.patest.cn/contests/pat-a-practise/1076

AC代码 .我一开始用普通的广度优先搜索超时,后来用队列AC;

#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>#include <queue>#include <unordered_map>using namespace std;struct Node{    vector<int>followers;};int main(){    int n,level,m,t,k,query;    scanf("%d %d",&n,&level);    vector<Node>ans(n+1);    for (int i=1; i<=n; ++i) {        scanf("%d",&m);        for (int j=0; j<m; ++j) {            scanf("%d",&t);            ans[t].followers.push_back(i);        }    }    scanf("%d",&k);    for (int i=0; i<k; ++i) {        int total= 0;        scanf("%d",&query);        unordered_map<int,int>nums;        nums[query]=1;        queue<int>q;        q.push(query);        int curlevel = 0,count1=1,count2=0;//记录转这一轮入队多少人.        while (!q.empty()&&curlevel<level) {            for(int x = 0;x<count1;x++){                int index = q.front();                q.pop();                for (int j=0; j<ans[index].followers.size(); ++j){                    if(nums[ans[index].followers[j]]==0){                        nums[ans[index].followers[j]]++;                        q.push(ans[index].followers[j]);                        total++;                        count2++;                    }                }            }            count1 = count2;            count2 = 0;            curlevel++;        }        printf("%d\n",total);    }    return 0;}


0 0