首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HDU 4707 Pet (热身赛其次题)

2013-09-09 
HDU 4707 Pet (热身赛第二题)转载请注明出处:http://blog.csdn.net/a1dark分析:读懂题意之后很简单的一个

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;}


热点排行