PAT A 1076

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<vector>
#include<queue>
#include<string>
using namespace std;
#define maxn 1010
int G[maxn][maxn]={
    
    0};
int n,k;
bool inq[maxn]={
    
    false};
struct node
{
    
    
    int id;
    int layer;
};
queue<node>q;
void BFS(int nowVisit)
{
    
    
    int ans=0;
    node now;
    now.id=nowVisit;
    now.layer=0;
    q.push(now);
    inq[nowVisit]=true;
    while(!q.empty()){
    
    
        node temp=q.front();
        q.pop();
        for(int i=1;i<=n;i++){
    
    
            if(inq[i]==false&&G[temp.id][i]!=0&&temp.layer<=k-1){
    
    
                inq[i]=true;
                node n;
                n.id=i;
                n.layer=temp.layer+1;
                q.push(n);
                ans++;
            }
        }
    }
    printf("%d\n",ans);
}
int main()
{
    
    
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
    
    
        int num;
        scanf("%d",&num);
        for(int j=0;j<num;j++){
    
    
            int x;
            scanf("%d",&x);
            G[x][i]=1;
        }
    }
    int cnt;
    scanf("%d",&cnt);
    while(cnt--){
    
    
        memset(inq,false,sizeof(inq));
        int st;
        scanf("%d",&st);
        BFS(st);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45890608/article/details/112400669