hdu5423

链接:点击打开链接

题意:两棵树中所有点到根节点的距离都相同时这两棵树叫做相似的树,两棵树中有某个节点的父节点不同时这两棵树叫不同的数,如果一棵树不存在另一棵树与之不同且相似则称这棵树为特殊的树,给出一棵树判断是否为特殊的树

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int s[1005][1005],sum[1005],dis[1005];
int n;
void dfs(int x,int num){
    int i;
    dis[x]=num;
    for(i=1;i<=n;i++)
    if(s[x][i]&&!dis[i])
    dfs(i,num+1);
}                                       //dfs求出每个节点的深度
int main(){
    int i,a,b,ans;
    while(scanf("%d",&n)!=EOF){
        memset(s,0,sizeof(s));
        memset(sum,0,sizeof(sum));
        memset(dis,0,sizeof(dis));
        for(i=1;i<=n-1;i++){
            scanf("%d%d",&a,&b);
            s[a][b]=s[b][a]=1;
        }
        dfs(1,1);
        for(i=1;i<=n;i++)
        sum[dis[i]]++;
        ans=0;
        for(i=1;i<=n;i++){
            if(sum[i]==1)
            ans++;
            else{
              if(sum[i+1]==0)
              ans=n;
              break;
            }                               //只有当每个深度都只有一个节点或者
        }                                   //只有最深的那一层节点不为1时才是
        if(ans==n)                          //特殊的数
        printf("YES\n");
        else
        printf("NO\n");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 18:46:04

hdu5423的相关文章

hdu5423 Rikka with Tree(DFS)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5423 题目大意:BC round# 53上有中文题意= = 思路:画图可以发现,其实题目本身不难.因为他有n个点,n条边,所以可以确定只有一棵树. 对于树中的某一个点来说,如果他有多个分支,然后分支下面又有边连出去,那么这种情况就一定是NO了. 比如1和2.3相连,然后2又与4相连,3与5相连,那么4和5就可以调换位置,此时这颗树就不是特殊的了. 所以我可以利用深搜记录下所有点的深度,对深度排序以后

ACM学习历程—HDU5423 Rikka with Tree(搜索)

Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them: For a tree T, let F(T,i) be the distance between vertice 1 and vertice i.(The length of