树形DP求树的直径】的更多相关文章

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Problem Description 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个…
在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这里只介绍树形dp 树形dp求树的直径 我们不妨设1号点为根节点,那么这就可以看做一棵有根树. 设D[x]表示从节点x出发,往以x为根的子树走,能够到达的最远距离.设x的子节点分别为y1,y2,y3,...,yt,edge(x,y)表示从x到y的边权,则可以得到状态转移方程: D[x]=max{D[y…
随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置可以用来建设,在它们之间也勘探确定了m条可以设计的路线以及他们的长度.请问是否能够建成环形的风景线?如果不能,风景线最长能够达到多少? 其中,可以兴建的路线均是双向的,他们之间的长度均大于0. Input 测试数据有多组,每组测试数据的第一行有两个数字n, m,其含义参见题目描述: 接下去m行,每行3…
hdu4607 Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2274 Accepted Submission(s): 1005 Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! Th…
前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶段的话一般是$f[i][j][0/1]$.$i$表示以$i$为根的子树,$j$一般表示保留$j$个子节点,$0/1$表示选/不选这个节点.一般第三维可以省去. 基本的DP方程 选择节点类 $f[i][0]=f[j][1]$ $f[i][1]=max/min(f[j][0],f[j][1])$ 背包类…
/* 两种做法 1.求出树直径v1,v2,那么有一个性质:任取一点u,树上到u距离最远的点必定是v1或v2 那么可以一次dfs求树v1 第二次求dis1[],求出所有点到v1的距离,同时求出v2 第三次求出dis2[],求出所有点到v2的距离 2.树形dp,dp[u][0|1]表示结点u向下的最大距离和向上的最大距离 dp[u][0]可以直接由子树求出 dp[u][1]应该从父节点推到子节点,如果v是u的大儿子,那么dp[v][1]=max(sec,dp[u][1])+e[i].w; 否则就是d…
比较经典的老题 题目意思:给你一颗节点数为n的树,然后其中m个特殊点,再给你一个值d,问你在树中有多少个点到这m个点的距离都不大于d. 这题的写法有点像树的直径求法,先随便选择一个点(姑且设为点1)来遍历一遍树,存下所有点到点1的距离.然后在m个特殊点中找到距离点1最远的点a1. 然后以a1为初始点遍历一遍树,求每一个点到a1的距离,存在dp[i]中.并且再在m个点中找到到a1距离最大的点a2.最后再以a2为初始点遍历一遍树,求到每一个点到a2的距离dp1[i].然后for遍历所有点,如果dp[…
[题意概述] 给出一棵树,树上的边有两个值a和b,你可以在[0,limit]范围内选择一个整数delta,树上的边的权值为a+b*delta,现在问当delta为多少的时候树的直径最小.最小直径是多少. [题解] 每条边的边权都是一次函数,那么直径是单峰函数.单峰函数求最小值我们可以用三分法. 注意边权可能为负数,求直径时要用DP,而不能用dfs到最远点.再从最远点dfs到它的最远点的方法. #include<cstdio> #include<cstring> #include&l…
题目链接:https://vjudge.net/problem/HDU-2196 题意:给出一棵树,求每个结点可以到达的最远距离. 思路: 如果求得是树上最长距离,两次bfs就行.但这里求的是所有点的最远距离,树形dp的经典题,想了一个小时,还是dp做得太少.分析可得对任意结点u,它的最长距离要么是向下延伸的最长距离,要不向上延伸的最长距离. 我们用dp[u][0]表示节点u向下(子结点)的最长距离,pt[u]记录该最长距离经过的第一个子结点编号,比如最长距离经过u->v,那么pt[u]=v.d…
题面 给定一棵 n n n 个结点的无根树,每条边的边权均为 1 1 1 . 树上标记有 m m m 个互不相同的关键点,小 A \tt A A 会在这 m m m 个点中等概率随机地选择 k k k 个不同的点放上小饼干.你想知道,经过有小饼干的 k k k 个点的最短路径长度的期望是多少.注意,你可以任意选取起点和终点,路径也可以经过重复的点或重复的边. 2 ≤ k ≤ m ≤ n ≤ 2000 2\leq k\leq m\leq n\leq2000 2≤k≤m≤n≤2000 . m ≤ 3…