树上子链

题意:

给定一棵树 T ,树 T 上每个点都有一个权值。
定义一颗树的子链的大小为:这个子链上所有结点的权值和 。
请在树 T 中找出一条最大的子链并输出。

题解:

求树的直径,题目中存在负权值,树形dp求树的直径可以处理负边权直径的模板:

void DP(int u,int pa)
{dp[u]=0;for(int i=head[u];i;i=E[i].nxt){int v=E[i].v;if(v==pa) continue;DP(v,u);mxlen=max(mxlen,dp[u]+dp[v]+E[i].dis);//这里直接用一个全部变量更新也可以dp[u]=max(dp[u],dp[v]+E[i].dis);}
}

另两个dfs也可以求直径,但是负边权不行

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=2e5+9;
vector< int>vec[maxn];
ll a[maxn];
ll dp[maxn];
ll ans=-0x3f3f3f;
void get_dp(int u,int fa){dp[u]=a[u];ans=max(ans,a[u]);for(int i=0;i<vec[u].size();i++){int v=vec[u][i];if(v==fa)continue;get_dp(v,u);ans=max(ans,dp[u]+dp[v]);dp[u]=max(dp[u],dp[v]+a[u]);}
}
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];} for(int i=1;i<n;i++){int u,v;cin>>u>>v;vec[u].push_back(v);vec[v].push_back(u);}get_dp(1,-1);cout<<ans;
}

这个代码中max1和max2分别表示最大值和次大值

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[100005];
vector<int> G[100005];
int n;
ll ans=-1e16;
ll dp[100005];//以i为根节点,到叶子节点的最大路径
void dfs(int now,int fa)
{ll max1=a[now],max2=a[now];//max1 到叶子节点的最大路径 max2次大路径 for(auto t:G[now]){if(t==fa) continue;dfs(t,now);if(dp[t]+a[now]>max1)//维护max1 {max2=max1;max1=dp[t]+a[now];}else if(dp[t]+a[now]>max2)//维护max2{max2=dp[t]+a[now];}     }dp[now]=max1;ans=max(ans,max1+max2-a[now]);
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);} for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}dfs(1,0);printf("%lld\n",ans);
}

树上子链(树形dp求树的直径)相关推荐

  1. 旅游(树形dp求树的最大独立集)

    链接:https://ac.nowcoder.com/acm/problem/15748 来源:牛客网 题目描述 Cwbc和XHRlyb生活在s市,这天他们打算一起出去旅游. 旅行地图上有n个城市,它 ...

  2. 树形DP求树的最小支配集,最小点覆盖,最大独立集

    转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...

  3. 求树的直径的两种方法

    树的直径 树型dp求树的直径 优缺点: 优点为可以处理边权为负的情况,但不易得到直径的路径(指树的直径经过什么点). 代码模板: #include<bits/stdc++.h> using ...

  4. 算法提高——树上DP(树的直径)

    文章目录 前言 一.什么是树的直径? 二.例题 三.树上DP 总结 前言 树的直径是图论里边非常高的考察点并且是入门树形dp的基础,竞赛的同学务必重视. 一.什么是树的直径? 树上最远两点(叶子结点) ...

  5. Problem K. Road Network - ACPC2015(求树的直径 dp)

    Problem K. Road Network 题目链接 Arab Collegiate Programming Contest 2015 题意: 树形的公路,如果阻塞道路可以断开两个区域彼此的连接, ...

  6. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 Claire and her little friend, ykwd, are travelli ...

  7. HDU4612+Tarjan缩点+BFS求树的直径

    tarjan+缩点+树的直径 题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少. 先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. 1 /* 2 ...

  8. 求树的直径+并查集(bfs,dfs都可以)hdu4514

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 这题主要是叫我们求出树的直径,在求树的直径之前要先判断一下有没有环 树的直径指的就是一棵树上面距 ...

  9. 《鲁滨逊漂流记》题解(LCA算法求树的直径)

    Description <鲁滨逊漂流记>只讲到了鲁滨逊在岛上建立起一个自给自足的生态环境.而大家不知道的是,在此之后,鲁滨逊因为太无聊,开始探索周边的岛屿,一共 NNN 天.鲁滨逊第 11 ...

最新文章

  1. 「元宇宙第一股」Roblox市值突破600亿美元!
  2. 如何根据原理图画封装_如何根据业务封装自己的功能组件
  3. c++中堆、栈内存分配
  4. Y2011_M12_HeartChicken
  5. ea连接远程oracle报错,PLSQL Developer日期格式如何定制化
  6. Java基础入门笔记-整数+小数+字符串+打印
  7. 如何割教育培训机构的韭菜?
  8. HTML 提高页面加载速度的方法
  9. 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符go时,第一个只出现一次的字符是g。当从该字符流中读出前六个字符“google时,,,(C++实现)
  10. Antelope 和Barracuda区别
  11. python pygame 游戏实战:Maze 迷宫生成,显示和游戏(附全部代码)
  12. Fedora14 基于Qt的UDP传输文字聊天小软件实现 (Qt查询本地Ip、Qt本地时间显示、传输中文汉字实现、Qt的textedit自动滚屏实现、给QPushButton设键盘快捷实现)---续上
  13. echarts 地图自定义图标_echarts 使用 百度地图 加入自定义图标标记
  14. java图书商城项目_JavaWeb之网上图书商城-框架搭建
  15. 德勤技术咨询 oracle,【内推】德勤急招Oracle/SAP功能、开发顾问,Siebel顾问,BI顾问,IT审计顾问...
  16. 生信自学笔记(五)计分矩阵的实例
  17. 什么是rest?什么是restful?它们之间是什么关系
  18. java设计五子棋_JAVA 五子棋设计
  19. 《Java语言程序设计——坦克大战单机游戏》源码以及实验报告
  20. 如何共享本地打印机,如何共享他人打印机

热门文章

  1. 和套套一样,一次性橡胶手套制作现场, 这鬼畜的画风
  2. 从小一看到数字,脑子里就开始搞颜色......
  3. 看着女朋友的肚子,以肉眼可见的速度大起来......
  4. 说普通话时舌头卷不起来是一种什么体验?| 今日最佳
  5. 垃圾软件!动不动就扣费!| 今日最佳
  6. 今年不容易,要懂得爱护自己
  7. “一边熬夜一边求不要猝死”,90后养生朋克指南,条条扎心!
  8. ordersta在php中是什么意思,[求助]ststa中的几个问题
  9. 虚拟ip工具_针对游戏防封换IP有用吗?
  10. jpa 默认生成sql语句_springboot-jpa自动创建数据库表