HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))
Pet
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 535 Accepted Submission(s): 258
10 2
0 1
0 2
0 3
1 4
1 5
2 6
3 7
4 8
6 9
DFS(深度优先搜索)
import java.io.*;
import java.util.*;
public class Main {
BufferedReader bu;
PrintWriter pw;
int MAX=1000001;
int t,n,d,e,num; int head[]=new int[MAX];
Node node[]=new Node[MAX];
boolean boo[]=new boolean[MAX]; public static void main(String[] args) throws Exception{
new Main().work();
}
void work()throws Exception{
bu=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(new OutputStreamWriter(System.out),true); t=Integer.parseInt(bu.readLine());
while(t--!=0){
String str[]; str=bu.readLine().split(" ");
n=Integer.parseInt(str[0]);
d=Integer.parseInt(str[1]);
e=0;
num=1;
Arrays.fill(head, -1);
Arrays.fill(boo,false); for(int i=1;i<n;i++){
str=bu.readLine().split(" ");
int a=Integer.parseInt(str[0]);
int b=Integer.parseInt(str[1]); add(a,b);
add(b,a);
}
boo[0]=true;
DFS(0,0);
pw.println(n-num);
}
} void DFS(int x,int index){
if(index>=d)
return;
for(int i=head[x];i!=-1;i=node[i].next){
int v=node[i].v;
if(!boo[v]){
boo[v]=true;
num++;
DFS(v,index+1);
}
}
} void add(int a,int b){
node[e]=new Node();
node[e].v=b;
node[e].next=head[a];
head[a]=e++;
} class Node{
int v;
int next;
}
}
BFS(广度优先搜索)
import java.io.*;
import java.util.*;
public class Main {
BufferedReader bu;
PrintWriter pw;
Queue<Integer> que;
int MAX=200010;
int t,n,d,e,num; int[] head=new int[MAX];
boolean[] boo=new boolean[MAX];
Node[] node=new Node[MAX];
int dis[]=new int[MAX];
public static void main(String[] args) throws Exception{
new Main().work();
}
void work()throws Exception{
bu=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(new OutputStreamWriter(System.out),true);
que=new LinkedList<Integer>();
t=Integer.parseInt(bu.readLine());
String str[];
while(t--!=0){
str=bu.readLine().split(" ");
n=Integer.parseInt(str[0]);
d=Integer.parseInt(str[1]); Arrays.fill(head,-1);
Arrays.fill(boo, false);
Arrays.fill(dis,0);
que.clear(); e=0;
num=0; for(int i=1;i<n;i++){
str=bu.readLine().split(" ");
int a=Integer.parseInt(str[0]);
int b=Integer.parseInt(str[1]);
add(a,b);
add(b,a);
}
boo[0]=true;
que.add(0);
BFS();
pw.println(num);
}
}
void BFS(){
while(!que.isEmpty()){
int t=que.poll();
for(int i=head[t];i!=-1;i=node[i].next){
int u=node[i].v;
if(!boo[u]){
dis[u]=dis[t]+1;
boo[u]=true;
que.add(u);
}
}
}
for(int i=0;i<n;i++){
if(dis[i]>d&&boo[i])
num++;
}
}
void add(int a,int b){
node[e]=new Node();
node[e].v=b;
node[e].next=head[a];
head[a]=e++;
}
class Node{
int v;
int next;
}
}
HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))的更多相关文章
- DFS_BFS(深度优先搜索 和 广度优先搜索)
package com.rao.graph; import java.util.LinkedList; /** * @author Srao * @className BFS_DFS * @date ...
- 0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想
dfs前置知识: 递归链接:0基础算法基础学算法 第六弹 递归 - 球君 - 博客园 (cnblogs.com) dfs深度优先搜索:0基础学算法 搜索篇第一讲 深度优先搜索 - 球君 - 博客园 ( ...
- BFS广度优先搜索 poj1915
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25909 Accepted: 12244 Descri ...
- 图的遍历BFS广度优先搜索
图的遍历BFS广度优先搜索 1. 简介 BFS(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点"死磕到底"的思维不同,广度优先 ...
- 算法竞赛——BFS广度优先搜索
BFS 广度优先搜索:一层一层的搜索(类似于树的层次遍历) BFS基本框架 基本步骤: 初始状态(起点)加到队列里 while(队列不为空) 队头弹出 扩展队头元素(邻接节点入队) 最后队为空,结束 ...
- DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票
题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少 ...
- 深度优先dfs与广度bfs优先搜索总结+例题
DFS(Deep First Search)深度优先搜索 深度优先遍历(dfs)是对一个连通图进行遍历的算法.它的思想是从一个顶点开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节 ...
- 步步为营(十六)搜索(二)BFS 广度优先搜索
上一篇讲了DFS,那么与之相应的就是BFS.也就是 宽度优先遍历,又称广度优先搜索算法. 首先,让我们回顾一下什么是"深度": 更学术点的说法,能够看做"单位距离下,离起 ...
- 【js数据结构】图的深度优先搜索与广度优先搜索
图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...
随机推荐
- C# 客户端服务端的编写
客户端的代码 class client { public void mehod() { TcpClient tcp = new TcpClient(); tcp.Connect(IPAddress.P ...
- 关于Dropdownlist使用的心得体会
2013-07-23关于Dropdownlist使用的心得体会: Dropdownlist使用最多的几个属性: 一.Dropdownlist.Items,负责包含所有选项的容器 DropDownLis ...
- ultraedit比较两个文件差异经验
链接地址:http://jingyan.baidu.com/article/fcb5aff7876551edab4a714b.html 程序开发人员经常要使用到两个文件的对比,有很多工具可以实现该功能 ...
- 怎样建立一个bower私库
本教程适用于centos 安装之前 检查nodejs 假设没安装nodejs依照下面步骤安装 $ su - $ yum install openssl-devel $ cd /usr/local/sr ...
- 苹果2014WWDC亮点之个人浅见
这届WWDC给人的整体感觉是融合.设备(手机IOS)和设备(电脑MAC OS X)的融合,人与信息的融合(SpotLight),人与代码的融合(Swift),人与人和设备的融合(HomeKit),接下 ...
- C#对数字添加逗号,千分位
/// <summary> /// 对数字添加”,“号,可以处理负数以及带有小数的情况 /// </summary> /// <param name="vers ...
- QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)
因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windo ...
- CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器
CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器 http://write.blog.csdn.net/postedit/10911105#本系列文章由ex_net(张建波)编写, ...
- on、where、having的区别(转载)
on.where.having的区别 on.where.having这三个都可以加条件的子句中,on是最先执行,where次之,having最后.有时候如果这先后顺序不影响中间结果的话,那最终结果是相 ...
- Java Swing界面编程(22)---事件处理:动作事件及监听处理
要想让一个button变得有意义,就必须使用事件处理.在swing的事件处理中.能够使用ActionListener接口处理button的动作事件. package com.beyole.util; ...