怎样建立网站有哪些流程,wordpress悬浮输入框,个人养老保险怎么买合适,一个服务器大概需要多少钱2925. 在树上执行操作以后得到的最大分数 两次DFS
class Solution {
public:// 节点状态有两种#xff0c;选和不选#xff0c;// dp(u, fa, 0) 不选u 节点#xff0c;其他节点都可以选#xff0c;值为以u为根的子树的所有节点的和- 根节点的值。// dp(u, fa, 1) 选u节点选和不选// dp(u, fa, 0) 不选u 节点其他节点都可以选值为以u为根的子树的所有节点的和- 根节点的值。// dp(u, fa, 1) 选u节点 其他子几点不选。vectorvectorint g;int n;vectorlong long gsum;void dfs(int u, int fa, vectorint values) {for (auto v : g[u]) {if (v fa) continue;dfs(v, u, values);gsum[u] gsum[v];}gsum[u] values[u];return;}vectorlong long dp0;vectorlong long dp1;void Dfs2(int u, int fa, vectorint values) {dp1[u] values[u];for (auto v : g[u]) {if (v fa) continue;Dfs2(v, u, values);if (g[v].size() 1) { // 叶子节点dp1[u] dp0[v];} else {dp1[u] max(dp1[v], dp0[v]);}}}long long maximumScoreAfterOperations(vectorvectorint edges, vectorint values) {n edges.size() 1;g.resize(n);for (auto edge : edges) {g[edge[0]].push_back(edge[1]);g[edge[1]].push_back(edge[0]);}gsum.resize(n, 0);dfs(0, -1, values);cout endl;dp0.resize(n);for(int i 0; i n; i) {dp0[i] gsum[i] - values[i];}dp1.resize(n);Dfs2(0, -1, values);return max(dp0[0], dp1[0]);}
};一次dfs
class Solution {
public:// 节点状态有两种选和不选// dp(u, fa, 0) 不选u 节点其他节点都可以选值为以u为根的子树的所有节点的和- 根节点的值。// dp(u, fa, 1) 选u节点 其他子几点不选。vectorvectorint g;int n;vectorlong long dp0;vectorlong long dp1;void Dfs2(int u, int fa, vectorint values) {dp1[u] values[u];for (auto v : g[u]) {if (v fa) continue;Dfs2(v, u, values);dp0[u] dp0[v] values[v];if (g[v].size() 1) { // 叶子节点, 注意叶子节点的size 为1不是0dp1[u] dp0[v];} else {dp1[u] max(dp1[v], dp0[v]);}}}long long maximumScoreAfterOperations(vectorvectorint edges, vectorint values) {n edges.size() 1;g.resize(n);for (auto edge : edges) {g[edge[0]].push_back(edge[1]);g[edge[1]].push_back(edge[0]);}dp0.resize(n);dp1.resize(n);Dfs2(0, -1, values);return max(dp0[0], dp1[0]);}
};