leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
2246.cpp (1030B)
0 class Solution {
1 public:
2 int longestPath(vector<int> &parent, string s) {
3 int n = parent.size();
5 vector<vector<int>> adj(n);
6 vector<int> pc(n, 0), count(n);
7 for (int i = 1; i < n; i++)
8 pc[parent[i]]++;
10 queue<int> q;
11 for (int i = 0; i < n; i++)
12 if (pc[i] == 0) q.push(i);
14 int res = 0;
15 while (true) {
16 int crnt = q.front();
17 q.pop();
19 int mx1 = 0, mx2 = 0;
20 for (int c : adj[crnt]) {
21 int a = s[crnt] != s[c] ? count[c] : 0;
22 if (a > mx1) {
23 mx2 = mx1;
24 mx1 = a;
25 } else if (a > mx2) {
26 mx2 = a;
27 }
28 }
29 res = max(res, mx1 + mx2 + 1);
30 count[crnt] = mx1 + 1;
32 if (crnt == 0) break;
33 int p = parent[crnt];
34 adj[p].push_back(crnt);
35 if (!--pc[p]) q.push(p);
36 }
38 return res;
39 }
40 };