hdoj 4707 BFS

 1 #include <iostream>
 2 #include <vector>
 3 #include <queue>
 4 #include <string.h>
 5 #include <stdlib.h>
 6 #include <stdio.h>
 7 using namespace std;
 8 const int MAXN=1000010;
 9 vector<int> vec[MAXN];
10 int dep[MAXN];
11 //int pre[MAXN];
12 void bfs(int s)
13 {
14     memset(dep,-1,sizeof(dep));
15     dep[s]=0;
16     queue<int> q;
17     q.push(s);
18     while(!q.empty()){
19         int u = q.front();
20         q.pop();
21         int sz = vec[u].size();
22         for(int i=0;i<sz;i++){
23             int v = vec[u][i];
24             if(dep[v]!=-1) continue;
25             dep[v]=dep[u]+1;
26 //            pre[v]=u;
27             q.push(v);
28         }
29     }
30
31 }
32 void dfs(int x)
33 {
34
35     for(unsigned i=0;i<vec[x].size();i++)
36     {
37         dep[vec[x][i]]=dep[x]+1;
38         dfs(vec[x][i]);
39     }
40     return;
41 }
42
43 int main()
44 {
45     int T;
46     int n;
47     int D;
48     scanf("%d",&T);
49     while(T--)
50     {
51         scanf("%d%d",&n,&D);
52         int u,v;
53         for(int i=0;i<n;i++){
54             vec[i].clear();
55         }
56
57         for(int i=1;i<n;i++){
58             scanf("%d%d",&u,&v);
59             vec[u].push_back(v);
60             vec[v].push_back(u);
61         }
62         bfs(0);
63         int ans=0;
64         for(int i=0;i<n;i++){
65             if(dep[i] > D)
66                 ans++;
67         }
68         cout<<ans<<endl;
69
70
71     }
72
73     return 0;
74 }
时间: 2024-10-17 22:03:02

hdoj 4707 BFS的相关文章

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

Pet(hdu 4707 BFS)

Pet Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2052    Accepted Submission(s): 1007 Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He sear

HDOJ 4707(模板)

1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 const int N=100050

hdoj 1312 Red and Black 【BFS】

题意:一共有四个方向,从'@'出发,找能到达'.'的个数, #是不能通过的. 策略:广搜. 这道题属于最简单的bfs了. 代码: #include<stdio.h> #include<string.h> #include<queue> using std::queue; bool vis[25][25]; char s[25][25]; int n, m; int ans = 0; struct node{ int x, y; }; node st; const int

BFS(八数码) POJ 1077 || HDOJ 1043 Eight

题目传送门1 2 题意:从无序到有序移动的方案,即最后成1 2 3 4 5 6 7 8 0 分析:八数码经典问题.POJ是一次,HDOJ是多次.因为康托展开还不会,也写不了什么,HDOJ需要从最后的状态逆向搜索,这样才不会超时.判重康托展开,哈希也可. POJ //#include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<string> #include<stack

HDOJ题目3309 Roll The Cube(BFS)

Roll The Cube Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 502    Accepted Submission(s): 181 Problem Description This is a simple game.The goal of the game is to roll two balls to two holes

hdoj 1885 Key Task 【BFS+状态压缩】

题目:hdoj 1885 Key Task 题意:给出一些点,然后有一些钥匙和门,钥匙拿到才可以打开门,问到出口的最短时间. 分析:很明显的广搜 + 状态压缩题目. 坑点: 1:题目没读清楚,以为要把所有的们打开才能出去. AC代码: #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include &

hdoj 2102 A计划 【BFS】

题目:hdoj 2102 A计划点击打开链接 题意:中文的就不说了.求救出公主所需要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是可以传送,那么我们可以在广搜里面加一个传送的条件就好了. 其次这个题目注意有个坑就是如果两边都是传送门的话也不行 还有注意广搜写法,如果把队列定义成全局的话注意清空!! #include <cstdio> #include <iostream> #include <queue> #include <cstr

hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】

题目:hdoj 1429 胜利大逃亡(续) 相同题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间,确定用BFS 这个题目的难点在于有几个锁对于几把钥匙,唯一的对应关系,不能用直接的标记法,因为一个图可能需要搜索多次. 仔细分析的话会发现,图的搜索次数是和钥匙的出现次数相关,那么我们可以用二进制的0 和 1 来表示第几把钥匙出现过没有,所以我们可以用状态压缩来标记那个钥匙出现过,然后用三维标记,第三维表示出现几个钥匙了的情况下图的点的搜索情况.其他就和简单的一样. AC代码: #incl