6073. 相邻字符不同的最长路径(树形dp)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6073. 相邻字符不同的最长路径(树形dp)相关的知识,希望对你有一定的参考价值。
6073. 相邻字符不同的最长路径(树形dp)
考虑每个点作为交叉点的最长路径,然后取最长路和次长路的最大值即可。
这样可以考虑到所有的情况。
class Solution
public:
int longestPath(vector<int>& p, string s)
int n = p.size();
vector<vector<int > >e(n);
for(int i=1;i<n;i++)
e[p[i]].push_back(i);
int ans = 0;
function<int(int)> dfs = [&](int u)
int mx = 0;//最长路
for(int v:e[u])
int len = dfs(v) + 1;
if(s[v]!=s[u])
ans = max(ans,mx+len);//最长路+次长路
mx = max(mx,len);//更新mx
return mx;
;
dfs(0);
return ans+1;//结点个数=长度+1
;
以上是关于6073. 相邻字符不同的最长路径(树形dp)的主要内容,如果未能解决你的问题,请参考以下文章