CF 633 F. The Chocolate Spree 树形dp

编程入门 行业动态 更新时间:2024-10-22 18:31:38

<a href=https://www.elefans.com/category/jswz/34/1764991.html style=CF 633 F. The Chocolate Spree 树形dp"/>

CF 633 F. The Chocolate Spree 树形dp

题目链接

CF 633 F. The Chocolate Spree

题解

维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链)
讨论转移

代码

#include<vector> 
#include<cstdio> 
#include<algorithm> 
#define gc getchar() 
#define pc putchar 
#define int long long 
inline int read() {int x = 0,f = 1; char c = gc;  while(c < '0' || c > '9') c = gc; while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc; return x * f; 
} 
void print(int x) {if(x >= 10) print(x / 10); pc(x % 10 + '0'); 
}
const int maxn = 100007; 
int val[maxn]; 
struct node { int v,next; 
} edge[maxn << 1]; 
int num = 0,head[maxn]; 
inline void add_edge(int u,int v) { edge[++ num].v = v; edge[num].next = head[u];head[u] = num; 
} 
int n; 
int f[maxn][2]; //0 : 两链之和最大 1 : 直径 
int g[maxn]; //表示以u为根的子树中从u到叶子节点加上另外一条链的最长长度
int h[maxn]; //子数的f[ ][1]的最大值 
int far[maxn]; //最远的叶子节点 
void dfs(int x,int fa) { far[x] = g[x] = f[x][1] = f[x][0] = val[x]; h[x] = 0; for(int i = head[x];i;i = edge[i].next) {  int v = edge[i].v; if(edge[i].v == fa) continue; dfs(v,x); f[x][0] = std::max(f[x][0],f[v][0]); f[x][0] = std::max(f[x][0],f[v][1] + f[x][1]); f[x][0] = std::max(f[x][0],far[x] + g[v]); f[x][0] = std::max(f[x][0],far[v] + g[x]); f[x][1] = std::max(f[x][1],f[v][1]);  f[x][1] = std::max(f[x][1],far[x] + far[v]); g[x] = std::max(g[x],val[x] + g[v]); g[x] = std::max(g[x],far[v] +val[x] + h[x]); g[x] = std::max(g[x],far[x] + f[v][1]); h[x] = std::max(h[x],f[v][1]); far[x] = std::max(far[x],far[v] + val[x]); } 
} 
main() { n = read(); for(int i = 1;i <= n;++ i) val[i] = read(); for(int i = 1;i < n;++ i) {int u = read(), v = read(); add_edge(u,v); add_edge(v,u); } dfs(1,0); print(f[1][0]); return 0; 
} 

转载于:.html

更多推荐

CF 633 F. The Chocolate Spree 树形dp

本文发布于:2024-02-11 20:21:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1683239.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:CF   Chocolate   dp   Spree

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!