树的高度

现在有一颗合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度。

分析:输入n个顶点,n-1条边,如果是完全合法的输入,那就简单的有向图,找入度为0的节点,然后广搜或者深搜(深搜代码简单),得到最大的深度就是树的高度。

但是:只过了70%的测试用例,我实在想不出来还有什么情况,1000的数据范围肯定不会超时,我怀疑是否存在非法输入,比如一个节点有超过2个节点的儿子。如果你知道,希望告知一下,谢谢!

 1 /*
 2 ID: y1197771
 3 PROG: test
 4 LANG: C++
 5 */
 6 #include<bits/stdc++.h>
 7 #define pb push_back
 8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
 9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
10 typedef long long ll;
11 using namespace std;
12 typedef pair<int, int> pii;
13 const int maxn = 1e3 + 10;
14 vector<int> e[maxn];
15 int n;
16 int res;
17 void dfs(int u, int d) {
18     res = max(res, d);
19     for (auto x : e[u]) {
20         dfs(x, d + 1);
21     }
22 }
23 int du[maxn];
24 void solve() {
25     cin >> n;
26     int x, y;
27     for (int i = 0; i < n - 1; i++) {
28         cin >> x >> y;
29         e[x].push_back(y);
30         du[y]++;
31     }
32     for (int i = 0; i < n; i++) {
33         if(du[i] == 0)
34             dfs(i, 1);
35     }
36     cout << res << endl;
37 
38 }
39 int main() {
40     freopen("test.in", "r", stdin);
41     //freopen("test.out", "w", stdout);
42     solve();
43     return 0;
44 }

 

转载于:https://www.cnblogs.com/y119777/p/5902637.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值