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)的主要内容,如果未能解决你的问题,请参考以下文章

Acwing 1072. 树的最长路径

树型DP

luogu P3174 [HAOI2009] 毛毛虫 树dp

求树的直径

HDOJ2196Computer(树的直径,树形DP)

9/3 树形dp+树的直径+最长路径 +st表