1857. 有向图中最大颜色值
1857. 有向图中最大颜色值
题目链接:1857. 有向图中最大颜色值
代码如下:
//参考链接:https://leetcode.cn/problems/largest-color-value-in-a-directed-graph/solutions/765871/an-zhao-tuo-bu-xu-dp-by-endlesscheng-2n4g
class Solution {
public:int largestPathValue(string colors, vector<vector<int>>& edges) {int n = colors.size();vector<vector<int>> g(n);for (auto& e : edges) {int x = e[0], y = e[1];if(x == y) {return -1; // 存在自环}g[x].push_back(y);}vector<vector<int>> memo(n);auto dfs = [&](auto&& dfs, int x)->vector<int> {if (!memo[x].empty()) {//x计算中或计算过return memo[x]; //如果是空vector,表示有环}memo[x] = { 0 };//表示计算中vector<int> res(26);for (int y : g[x]) {auto cy = dfs(dfs, y);if (cy.size() <= 1) {//表示有环return cy;}for (int i = 0;i < 26;i++) {res[i] = max(res[i], cy[i]);}}res[colors[x] - 'a']++;return memo[x] = res;//记忆化,同时也表示x计算完毕};int ans = 0;for (int x = 0;x < n;x++) {auto res = dfs(dfs, x);if (res.size() <= 1) {//表示有环return -1;}ans = max(ans, res[colors[x] - 'a']);}return ans;}
};