根据提示做即可,总感觉数据结构用的不好,以后看看大神都是怎么用数组存树的。
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 }