尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

百度之星 Diversity (简单树形dp)

百度之星 Diversity (简单树形dp)
📅 发布时间:2026/7/28 16:41:35

题意描述:

Diversity

给你一棵n个点的树,对于节点ii,你要给它标上一个[l​i​​,r​i​​]之间的数,

要求所有边两端节点上标的数字的差的绝对值的总和最大。

Input

第一行一个整数T T(1≤T≤5)表示数据组数。对于每组数据格式如下。

第一行一个正整数n(2≤n≤10​5​​)。

接下来n-1行,每行两个正整数 u, v(1≤u,v≤n),表示一条边。

接下来nn行,第ii行两个正整数l​i​​,r​i​​(1 ≤ l​i ​​≤ r​i ​​≤ 10^​9​​)。

Output

对于每组数据,一个整数表示答案。

Sample Input

1 5 1 2 2 3 3 4 4 5 1 5 2 7 7 9 5 8 3 4

Sample Output

16

思路:

树形dp入门题???

开始考虑只要对于每一个节点,要么选择最左端,要么选择最右端点,显然,

这一策略是正确的。

然后假设根节点权值确定,整棵树的状态即确定,然后按照dfs序正向状态转移,

两种状态取较大者作为最优解。(这种贪心策略是不对的,如父节点到子节点的左右

边界差值一致,这时候该怎么选择?)。

但如果逆向考虑就不会有类似问题了,这一点倒是考虑到了,这写出了代码,

但状态转移条件搞错了,具体说错误原因转移时只考虑了父节点和子节点间差值的

大小,而没有加上子节点所在子树的整个权值,所以导致选择出的并不是全局最优解。

代码实现:

#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #define inf 0x3f3f3f3f using namespace std; const int N = 1e5+100; const int M = 2e5+100; int head[N],ver[M],Next[M],tot; void add(int x,int y) { ver[++tot]=y; Next[tot]=head[x]; head[x]=tot; } long long dp[N][2]; int Left[N],Right[N]; void dfs(int x,int pre) { long long a,b,c,d; for(int i=head[x]; i; i=Next[i]) { int y=ver[i]; if(i==(pre^1))continue; dfs(y,i); a=abs(Left[y]-Left[x]); b=abs(Right[y]-Left[x]); c=abs(Left[y]-Right[x]); d=abs(Right[y]-Right[x]); //转移条件易错 if(dp[y][0]+a>dp[y][1]+b) dp[x][0]+=dp[y][0]+a; else dp[x][0]+=dp[y][1]+b; if(dp[y][0]+c>dp[y][1]+d) dp[x][1]+=dp[y][0]+c; else dp[x][1]+=dp[y][1]+d; } } int main() { #ifdef MYHOME_Wjvje freopen("input.txt","r",stdin); #endif int t,n; scanf("%d",&t); long long ans; while(t--) { tot=1; ans=0; scanf("%d",&n); memset(head,0,sizeof(head)); memset(Next,0,sizeof(Next)); memset(dp,0,sizeof(dp)); for(int i=1; i<n; i++) { int x,y; scanf("%d%d",&x,&y); add(x,y); add(y,x); } for(int i=1; i<=n; i++) scanf("%d%d",&Left[i],&Right[i]); dfs(1,0); ans=max(dp[1][0],dp[1][1]); printf("%lld\n",ans); } return 0; }

THE END;

相关新闻

  • JavaAgent技术之添加注解
  • 呼叫中心CRM对接实战:API联动原理、来电弹屏、数据同步与业务闭环落地方案
  • AI普通话智能评测系统:核心技术解析与应用实践

最新新闻

  • 计算复杂性-2
  • Godot 4 CharacterBody2D 角色移动:输入、碰撞与八方向控制实战
  • 长鑫科技超3万亿市值登科创板,创始人分367.5亿股权,合肥国资成最大赢家
  • 好用的国外云服务器TOP6推荐排行榜,性能真的非常夯 国外云服务器应该怎么选? - 科技先行者
  • AI短剧创作系统:源码交付与全流程自动化实践
  • EncodingChecker:3步解决文件乱码问题的终极指南

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号