HDU 4707 Pet (热身赛第二题)

转载请注明出处:http://blog.csdn.net/a1dark

分析:读懂题意之后很简单的一个搜索、在D之外的个数有多少个、

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;
struct node{
    int s,e;
    int next;
}cnt[100005*4];
int root[100005];
int vis[100005];
int dis[100005];
int ans,n,num,T;
void add(int s,int e){
    cnt[++ans].e=e;
    cnt[ans].next=root[s];
    root[s]=ans;
}
void bfs(){
    queue<int>q;
    q.push(0);
    vis[0]=1;
    dis[0]=1;
    int s,e,i;
    while(!q.empty()){
        s=q.front();
        if(dis[s]==T+2)
            break;
        q.pop();
        for(i=root[s];i!=-1;i=cnt[i].next){
            e=cnt[i].e;
            if(!vis[e]){
                vis[e]=1;
                dis[e]=dis[s]+1;
                q.push(e);
            }
        }
    }
    for(i=0;i<n;i++){
        if(dis[i]==T+2 || dis[i]==0)
            num++;
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        num=0;
        memset(root,-1,sizeof(root));
        memset(vis,0,sizeof(vis));
        memset(dis,0,sizeof(dis));
        ans=-1;
        scanf("%d%d",&n,&T);
        for(int i=0;i<n-1;i++){
            int s,e;
            scanf("%d%d",&s,&e);
            add(s,e);
        }
        bfs();
        printf("%d\n",num);
    }
    return 0;
}


你可能感兴趣的:(搜索,ACM,HDU,4707)