hdu 4707 仓鼠 记录深度 裸bfs

题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且图中没有回路,每个房间都是联通的,求仓鼠可能出现的房间的数量。

Sample Input
1
10 2
0 1
0 2
0 3
1 4
1 5
2 6
3 7
4 8
6 9

Sample Output
2

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <vector>
 5 #include <queue>
 6
 7 using namespace std;
 8
 9 const int MAXN = 100010;
10 vector<int>vec[MAXN];
11 int dep[MAXN];
12 int pre[MAXN];
13 void bfs(int s)
14 {
15     memset(dep,-1,sizeof(dep));
16     dep[s] = 0;
17     queue<int>q;
18     q.push(s);
19     while(!q.empty())
20     {
21         int u = q.front();
22         q.pop();
23         int sz = vec[u].size();
24         for(int i = 0;i < sz;i++)
25         {
26             int v = vec[u][i];
27
28             if(dep[v] != -1)continue;
29             dep[v] = dep[u] + 1;
30             pre[v] = u;
31             q.push(v);
32         }
33     }
34 }
35 int main()
36 {
37     //freopen("in.txt","r",stdin) ;
38     int T;
39     int n;
40     int D;
41     scanf("%d",&T);
42     while(T--)
43     {
44         scanf("%d%d",&n,&D);
45         int u,v;
46         for(int i = 0;i < n;i++)
47             vec[i].clear();
48         for(int i = 1;i < n;i++)
49         {
50             scanf("%d%d",&u,&v);
51             vec[u].push_back(v);
52             vec[v].push_back(u);
53         }
54
55         bfs(0);
56         int ans = 0;
57         for(int i = 0;i < n;i++)
58             if(dep[i] > D)
59                 ans++;
60         cout<<ans<<endl;
61     }
62     return 0;
63 }

时间: 2024-11-02 21:24:56

hdu 4707 仓鼠 记录深度 裸bfs的相关文章

HDU 1253-胜利大逃亡--裸三维BFS

G - 胜利大逃亡 Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1253 Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-

hdu 4707 bfs

bfs基础算法水题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<queue> using namespace std; const int Max = 1e5+50; int dist[Max]; vector<int> t

USACO 3.2 msquare 裸BFS

又是个裸BFS... 和西安网赛那道1006一样的,只不过加上了要记录方案.顺便复习map 记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操作序列记下来 1 /* 2 PROB:msquare 3 LANG:C++ 4 */ 5 6 #include <iostream> 7 #include <vector> 8 #include <algorithm> 9 #include <map> 10 #

HDU 4280 Island Transport 网络流裸题

非递归版好像被卡掉了,其他2个板子都能过. #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<vector> using namespace std; #define ll int const int MAXN = 100100;//点数的最大值 const int MAXM = 400010;//边数的最大值 const in

hdu 1394 Minimum Inversion Number (裸树状数组 求逆序数)

题目链接 题意: 给一个n个数的序列a1, a2, ..., an ,这些数的范围是0-n-1, 可以把前面m个数移动到后面去,形成新序列:a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)...an, a1, a2, ..., an-1 (where m = n-1)求这些序列中,逆序数最少的

hdu 1312 Red and Black(BFS水题)

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9684    Accepted Submission(s): 6021 Problem Description There is a rectangular room, covered with square tiles. Each tile is colore

hdu 2102 A计划(双层BFS)(详解)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来拯救公主.不过公主早已习以为常,她

HDU 1195 Open the Lock 双向BFS

题目链接:Open the Lock 题意:就是给定两个4位数,起始,结束.问从起始数字到达结束数字 最少变换多少步,每个数 可以+1 / -1 或交换位置,都算做是一步. 单广,双广都用了,感觉双向BFS,太棒了,HDU的这个题双向BFS时间优化的太棒了 有图,有真相! 时间优化了近9倍... PS:今天还学习一个sscanf函数,挺棒的 单搜的代码就不贴了,贴个双搜的 #include<cstdio> #include <iostream> #include<cstrin

HDU 1102 Constructing Roads (裸的并查集)

Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13210    Accepted Submission(s): 4995 Problem Description There are N villages, which are numbered from 1 to N, and you should