HDU-5423 Rikka with Tree。树深搜
Rikka with Tree
题意:给出树的定义,给出树相似的定义和不同的定义,然后给出一棵树,求是否存在一颗树即和其相似又与其不同。存在输出NO,不存在输出YES。
思路:以1号节点为根节点,我们观察到一颗树如果不存在这种树即与其相似又与其不同,那么这棵树要么所有节点的深度都不一样,要么有深度一样的并且他们的父节点都一样,后来想想,如果当前节点的父节点有多个儿子,那么当前节点则不能有儿子节点,否则就可以将儿子节点转移到兄弟节点上。思路很正确,比赛的时候用深搜递归写就错了,改成两层循环枚举任意两个节点看是否符合情况然后就过了,,过了。。代码能力还是不行啊,思路都一样,哪里写错了都不知道。
来看两种写法:
深搜标记:WA?
void init()
{
memset(d,0,sizeof(d));
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
for(int i=0;i<N;i++) g[i].clear();
}
void dfs(int u,int fa)
{
d[u]=d[fa]+1;
if(vis1[d[u]])
{
if(vis1[d[u]]!=fa)//度相同根节点不同那么可以互换
{f=1;
// printf("%d %d %d %d\n",u,fa,d[u],vis1[d[u]]);
}
}
else vis1[d[u]]=fa;
int len=g[u].size();
if(len>1) vis2[u]=1;
for(int i=0;i<len;i++)
{
int v=g[u][i];
if(v!=fa)
{
// printf("%d %d %d %d %d\n",v,u,fa,d[u],vis1[d[u]]);
if(u!=fa&&vis2[fa]) f=1;
dfs(v,u);
}
}
}
int main()
{
int n,u,v;
while(~scanf("%d",&n))
{
init();
for(int i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
f=0;
dfs(1,1);
if(f) puts("NO");
else puts("YES");
}
return 0;
}
以上有种样例能debug:
5
1 2
2 3
3 4
3 5
output: NO
Answer : YES
深搜预处理+枚举,AC!正确思路:父节点一样的情况下不能有儿子节点,否则可以将儿子节点转移至兄弟节点。
void init()
{
memset(pre,0,sizeof(pre));
memset(d,0,sizeof(d));
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
for(int i=0; i<N; i++) g[i].clear();
}
void dfs(int u,int fa)
{
d[u]=d[fa]+1;
pre[u]=fa;
int len=g[u].size();
for(int i=0; i<len; i++)
{
int v=g[u][i];
if(v!=fa) dfs(v,u);
}
}
int main()
{
int n,u,v;
while(~scanf("%d",&n))
{
init();
for(int i=1; i<n; i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
f=0;
dfs(1,1);
for(int i=1; i<=n&&!f; i++)
for(int j=1; j<=n&&!f; j++)
if(i!=j&&d[i]==d[j])
{
if(pre[i]==pre[j])
{
int k1=g[i].size();
int k2=g[i].size();
if(k1>1||k2>1) f=1;
}
else f=1;
}
if(f) puts("NO");
else puts("YES");
}
return 0;
}
HDU-5423 Rikka with Tree。树深搜的更多相关文章
- HDU 5423:Rikka with Tree Dijkstra算法
Rikka with Tree Accepts: 207 Submissions: 815 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- hdu 5423 Rikka with Tree(dfs)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002
题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1. 定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2. 对于树A与树B,如 ...
- Hdu 5274 Dylans loves tree (树链剖分模板)
Hdu 5274 Dylans loves tree (树链剖分模板) 题目传送门 #include <queue> #include <cmath> #include < ...
- hdu 5648 DZY Loves Math 组合数+深搜(子集法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5648 题意:给定n,m(1<= n,m <= 15,000),求Σgcd(i|j,i&am ...
- HDU 2553 N皇后问题 (深搜)
题目链接 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对 ...
- hdu 1242 不用标记数组的深搜
#include<stdio.h>#include<string.h>char mapp[220][220];int m,n,mmin;void dfs(int x,int y ...
- (hdu)5423 Rikka with Tree (dfs)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5423 Problem Description As we know, Rikka is p ...
- hdu 6121---Build a tree(深搜+思维)
题目链接 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n− ...
随机推荐
- 提高VS2010运行速度的技巧+关闭拼写检查
任务管理器,CPU和内存都不高,为何?原因就是VS2010不停地读硬盘导致的; 写代码2/3的时间都耗在卡上了,太难受了; 研究发现,VS2010如果你装了VC等语言,那么它就会自动装SQL Serv ...
- windows下Mongodb和Memcached安装笔记
MongoDB安装: D:\ProgramFiles\MongoDBServer3.2\bin\mongod --dbpath D:\mongoData D:\ProgramFiles\MongoDB ...
- scrollviews page分页实现方式
代码 buttonX = 0; buttonW = 50; buttonH = 20; margin = (self.view.width - 5 * buttonW) / 6; CGFloat ym ...
- pathForResource获取资源为nil的原因
利用NSbundle获取 资源文件的时候,如果是自己添加的文件,获取的时候纵使返回nil的解决办法.原因是因为该文件没有添加到资源文件中,只要在添加文件的时候选择添加到 Create Folder R ...
- 快学UiAutomator配置编辑环境
Java环境配置 1.下载jdk1.6+包 2.安装jdk,默认安装即可 3.成功安装之后,进行测试是否真的成功安装,点击[开始]----[运行]----输入 CMD,在命令提示符里面输入“Java ...
- Robotium实践之路源码创建测试项目
1.JDK安装及环境配置 2.Eclipse安装 3.ADT插件安装 4.模拟器安装 5.准备源码 6.引进源码置项目中 .文件 .导入 .选择现有项目置工作空间中 .浏览 .选择项目,选择模拟器版本 ...
- null 理解
值 null 特指对象的值未设置.它是 JavaScript 基本类型 之一. 语法节 null 描述节 值 null 是一个字面量,它不像undefined 是全局对象的一个属性.null 是表示缺 ...
- Bootstrap历练实例:表单帮助文件
Bootstrap表单控件可以在输入框input上有一个块级帮助文本,为了添加一个占用整个宽度的内容块,请在input后添加help-block. 实例: <!DOCTYPE html>& ...
- iOS 第三方类库之MBProgressHUD
github链接地址 MBProgressHUD是一个开源的第三方类库实现了很多种样式的提示框,类似Activity indicator,使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大, ...
- javascipt的forEach
1.Array let arr = [1, 2, 3]; arr.forEach(function (element, index, array) { console.log('数组中每个元素:', ...