码迷,mamicode.com
首页 > 其他好文 > 详细

树的高度

时间:2016-09-24 12:07:29      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

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

分析:输入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 }

 

树的高度

标签:

原文地址:http://www.cnblogs.com/y119777/p/5902637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!