hihoCoder#1050 树中的最长路

原题地址

 

根据提示做即可,总感觉数据结构用的不好,以后看看大神都是怎么用数组存树的。

 

 1 #include <iostream>

 2 #include <vector>

 3 

 4 using namespace std;

 5 

 6 struct Node {

 7   int first;

 8   int second;

 9   bool rootp;

10   vector<int> children;

11   Node() : first(0), second(0), rootp(true) {}

12 };

13 

14 int bestpath = 0;

15 

16 void traverse(Node *nodes, int root) {

17   if (nodes[root].children.empty()) {

18     nodes[root].first = 0;

19     nodes[root].second = 0;

20     return;

21   }

22 

23   int first = 0;

24   int second = 0;

25 

26   for (auto c : nodes[root].children) {

27     traverse(nodes, c);

28     second = max(second, min(first, nodes[c].first));

29     first = max(first, nodes[c].first);

30   }

31   if (nodes[root].children.size() == 1)

32     second = -1;

33 

34   nodes[root].first = first + 1;

35   nodes[root].second = second + 1;

36   bestpath = max(bestpath, nodes[root].first + nodes[root].second);

37 }

38 

39 int main() {

40   int N;

41   int a, b;

42   Node nodes[100010];

43 

44   cin >> N;

45   for (int i = 1; i < N; i++) {

46     cin >> a >> b;

47     nodes[a - 1].children.push_back(b - 1);

48     nodes[b - 1].rootp = false;

49   }

50 

51   for (int i = 0; i < N; i++) {

52     if (nodes[i].rootp) {

53       traverse(nodes, i);

54       break;

55     }

56   }

57 

58   cout << bestpath << endl;

59 

60   return 0;

61 }

 

你可能感兴趣的:(code)