链接:点击打开链接
题意:两棵树中所有点到根节点的距离都相同时这两棵树叫做相似的树,两棵树中有某个节点的父节点不同时这两棵树叫不同的数,如果一棵树不存在另一棵树与之不同且相似则称这棵树为特殊的树,给出一棵树判断是否为特殊的树
代码:
#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