#include <iostream>
#include <cstring>
using namespace std;//maxv:源点能到的最远点,maxdis:最远点对应的距离,
const int maxn = 1e4 + 5;
struct Edge { int to, next, w; }edges[2 * maxn];
int head[maxn], maxdis,maxv, tot; void add(int u, int v, int w) {edges[tot] = { v, head[u], w };head[u] =tot++;
}void dfs(int u, int f, int Val) {if (maxdis < Val){maxdis = Val;maxv = u;}for (int e = head[u]; e != -1; e = edges[e].next) {int v = edges[e].to, w = edges[e].w;if (v == f) continue;  //父节点已经访问过,防止重复遍历,相反孩子不会重复遍历。dfs(v, u, Val + w);}
}int main()
{int e, u, v, w, s;cin >> e;memset(head, -1, sizeof(head));for (int i = 1; i <= e; i++) {cin >> u >> v >> w;add(u, v, w), add(v, u, w);}dfs(1, -1, 0); //从结点1开始遍历,找到最远点maxv及对应的最远距离maxdismaxdis = 0;cout <<maxv<<endl;//输出直径的第一个端点dfs(maxv, -1, 0);//从结点maxv开始遍历,找到最远点对应的距离maxdiscout << maxdis << endl; //輸出树的直径cout <<maxv<<endl;//输出树的直径的第二个端点return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 100005;
int head[MAX], dp[MAX][2];
int n, s, cnt, ans;
struct EDGE
{int v, w, next;
} e[MAX];
void Add(int u, int v, int w)
{e[cnt].v = v;e[cnt].w = w;e[cnt].next = head[u];head[u] = cnt++;
}
void DFS(int u, int fa)
{dp[u][0] = dp[u][1] = 0;for (int i = head[u]; i != -1; i = e[i].next){int v = e[i].v;int w = e[i].w;if (v != fa){DFS(v, u);if (dp[u][0] < dp[v][0] + w){int tmp = dp[u][0];dp[u][0] = dp[v][0] + w;dp[u][1] = tmp;}else if (dp[u][1] < dp[v][0] + w)dp[u][1] = dp[v][0] + w;}}ans = max(ans, dp[u][1] + dp[u][0]);return;
}
int main()
{cnt = 0;ans = 0;memset(head, -1, sizeof(head));scanf("%d %d", &n, &s);int sum = 0;for (int i = 0; i < n - 1; i++){int u, v, w;scanf("%d %d %d", &u, &v, &w);Add(u, v, w);Add(v, u, w);sum += 2 * w;}DFS(s, -1);printf("%d\n", ans);
}

图论--树的直径--DFS+树形DP模板相关推荐

  1. Acwing1072 树的最长路径(树的直径)树形Dp 记忆化搜索

    题目描述 原题链接: https://www.acwing.com/problem/content/1074/ 思路 以下针对树的边权都一样的情况. 推荐使用BFS, 比赛的时候栈空间只有1MB,DF ...

  2. P1099 树的直径 DFS + 二分 / 尺取法

    题意 传送门 P1099 树网的核 在任意一条直径上求出的最小偏心距都相等. 树上只有一条直径时显然成立.当树有多条直径,它们必定相交,且中点汇聚于同一处,那么中心附近树的各条直径的重叠部分是相同的, ...

  3. 0x63.图论 - 树的直径与最近公共祖先

    目录 一.树的直径(Diameter) 1.树形DP求树的直径 2.两次BFS/DFS求树的直径 1.POJ 1985.Cow Marathon(DFS求树的直径模板题) 2.AcWing 350. ...

  4. QBXT 2018春季DP图论班 2018.5.4 --- 树形DP

    *张浩威老师授课* 树形DP:即在树上DP,用dp[i][]...表示以i为根的子树.....常从根DFS,递归转移dp数组. 没有上司的舞会-- 给定一棵有点权的二叉树,选择若干点,使得选出的点任意 ...

  5. 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)

    题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...

  6. 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐

    P2016 战略游戏 这道题的城堡是一颗树 题中有 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 所以定义数组f[i][1/0]f[i][1/0]f[i][1/0]表示的是节点 ...

  7. [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]

    题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...

  8. [XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)

    树与图 如果真的在图上跑算法,那么光建图复杂度就O(n2logn)O(n^2logn)O(n2logn)了,这显然不可行.所以一定要把 在图上的操作 转换成 在树上的操作 在图上删去点u,相当于在树上 ...

  9. P7103 「C.E.L.U-01」族谱树 (dfs 树形dp

    添加链接描述 #include<bits/stdc++.h> using namespace std; const int N=5e6+9; int e[N],ne[N],h[N],idx ...

最新文章

  1. 堆(heap)和栈(stack)有什么区别
  2. JBPM executionService.deleteProcessInstanceCascade(id)报错
  3. 专家支招:手把手教你如何选型移动CRM
  4. 在QT中结构体快速从二进制文件中读取数据
  5. Acwing第 30 场周赛【完结】
  6. VS C++生成dll和静态调用dll的方法
  7. 【机器视觉】 dev_clear_obj算子
  8. 数据的交换输出【杭电-2016】 附题
  9. Pytorch——搭建深度神经网络的基本流程
  10. 如何在腾讯云服务器部署web项目
  11. c语言美元符号用法,R函数()中美元符号“$”的含义是什么?
  12. SaaS模式和传统软件模式有什么区别?
  13. python,使用微信远程控制电脑或使用微信定时发送消息关于QR.png报错的解决办法
  14. PHP windoews调用OpenOffice实现word/ppt转PDF-附带demo
  15. Windows10 64位 + caffe + Matlab -- cpu版本
  16. html5 中scale函数,javascript中scale怎么使用?
  17. OpenCV实例140+ (1 图像处理基础知识)
  18. Mac上Chrome浏览器跨域问题
  19. 使用nginx临时搭建rtmp服务器
  20. 3d模型多怎么优化_3D打印外观结构手板模型,使用越来越多

热门文章

  1. Android开发之Git提交Template模板配置
  2. 苹果笔记本怎么找文件夹_如何在苹果笔记本中找出 “~/Library/Preferences/” 文件夹?...
  3. apache Storm学习之二-基本概念介绍
  4. 登录表单 参考新浪微博
  5. android 中Dialog对话框及自定义Dialog的方法
  6. union-find算法分析(1)
  7. ubuntu 下review board一遍安装成功
  8. 解决xp登陆域很慢的方法
  9. IIS服务器Web访问提示输入密码问题
  10. 松下壁挂式新风系统推荐_壁挂式新风系统哪个好?