HDU 5432 Rikka with Tree (BestCoder Round #53 (div.2))
http://acm.hdu.edu.cn/showproblem.php?pid=5423
题目大意:给你一个树 判断这棵树是否是独特的
一颗树是独特的条件:不存在一颗和它本身不同但相似的树
两颗树相似条件:两颗树中点的数量相等且相对应的点的深度相同
如第2个样例
4
1 2
2 3
1 4
与
4
1 2
1 4
3 4
如图:这两棵树的点的数量相等且相应的点的深度deep相同,所以这两棵树相似,所以样例2存在一颗树与它不同但相似,即不特殊

运用广搜统计每个点的深度
要想一颗树特殊,只有保证他的分支下面不再有子节点
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 1010 using namespace std; struct Edge
{
int u, v, cnt, next;
}edge[N * N]; int head[N], j, cnt;
int a[N];//记录各个点的深度
bool vis[N]; void Add(int u, int v)//邻接表
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
} void Init()
{
memset(head, -, sizeof(head));
memset(a, , sizeof(a));
memset(vis, false, sizeof(vis));
cnt = j = ;
} void DFS(int u, int deep)
{
int v, i;
vis[u] = true;
for(i = head[u]; i != - ; i = edge[i].next)
{
v = edge[i].v;
if(!vis[v])
{
vis[v] = true;
DFS(v, deep + );
}
}
a[j++] = deep;
return ;
}//查找记录各个点的深度 int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
} int main()
{
int n, u, v;
while(~scanf("%d", &n))
{
Init();
for(int i = ; i < n ; i++)
{
scanf("%d%d", &u, &v);
Add(u, v);
Add(v, u);
}
DFS(, );
qsort(a, j, sizeof(a[]), cmp);
int deep = , f = , fl = ;
for(int i = ; i < j ; i++)
{
if(a[i - ] == a[i])
{
fl = ;//如果两个点的深度相同,就存在分支,即标记有分支
deep = a[i];
}
if(fl == && a[i] > deep)
f = ;//如果存在分支且分支的下面还有节点则输出NO
}
if(f == )
printf("YES\n");
else
printf("NO\n");
}
return ;
}
HDU 5432 Rikka with Tree (BestCoder Round #53 (div.2))的更多相关文章
- hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)
http://acm.hdu.edu.cn/showproblem.php?pid=5424 哈密顿通路:联通的图,访问每个顶点的路径且只访问一次 n个点n条边 n个顶点有n - 1条边,最后一条边的 ...
- 哈密顿图 BestCoder Round #53 (div.2) 1003 Rikka with Graph II
题目传送门 题意:判断是否为哈密顿图 分析:首先一种情况是不合法的:也就是度数为1的点超过2个:合法的有:,那么从度数为1的点开始深搜,如果存在一种走法能够走完n个点那么存在哈密顿路 收获:学习资料 ...
- BestCoder Round #53 (div.1)
Problem A: 题目大意: 给出以节点1为根的一棵树A,判断它是否是特殊的.一棵树是特殊的当且仅当不存在和它不完全相同的一棵树B,使得A中点i到点1的距离和B中相等. 题解: 假设一个点x的深度 ...
- hdu 5423 Rikka with Tree(dfs)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- BestCoder Round #68 (div.2) tree(hdu 5606)
tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- hdu 5636 搜索 BestCoder Round #74 (div.2)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)
Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
- hdu5631 BestCoder Round #73 (div.2)
Rikka with Graph Accepts: 123 Submissions: 525 Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
随机推荐
- 51nod1394 差和问题
我只会用线段树写...不喜欢树状数组..其实跑的也不算慢?然后各种*的时候忘了longlong一直WA...药丸! 而且我不怎么会用map离散化...那么就sort+unique #include&l ...
- hdu4604 deque
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 思路:就是模拟一下,求每一个开始的非上升和非下降序列.然后求重复的数,由于求出来可能不会是我们想 ...
- Linux 查找文件方法
1) find -name httpd.conf 2) find /etc -name "*repo" 详情查找命令-> http://www.yesky.com/210/1 ...
- BZOJ 1010 玩具装箱
斜率优化. 事实上是选一个大于某个数的最小斜率.维护下凸壳. #include<iostream> #include<cstdio> #include<cstring&g ...
- erl0007 - erlang 远程节点连接的两种方式
启动连接:erl -setcookie abc -name xxx@192.168.x.x -remsh xxx@192.168.x.y 退出:ctrl + g,q 参考:http://www.cnb ...
- 重拾Excel之为什么
现在如今想想自己,已经有许久许久没有充过电了.现在想好好地充电. 机遇总是垂青于有准备的人!
- php 系统命令执行函数
(转载)作者:海底苍鹰地址:http://blog.51yip.com/php/1064.html 1,exec函数 <?php $test = "ls /tmp/test" ...
- 剑指offer-第三章高质量的代码(调整数组顺序使得奇数位于偶数的前面)
题目:输入一个整数数组,实现一个函数中调整该数组中数字的顺序,使得所有的奇数位于数组的前半部,所有偶数位于数组的后半部. 思路:用两个指针p1和p2,分别指向数组的头和尾部,p1只向后移,p2只向前移 ...
- Linux进程调度策略
linux内核的三种主要调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略(先到先服务)3,SCHED_RR实时调度策略(时间片轮转) 实时进程将得到优先调用 ...
- 【转】C# 委托的介绍(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegat ...