51nod 1405 树的距离之和 树形dp】的更多相关文章

1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB   收藏  关注 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input 第一行包含一个正整数n (n <= 100000),表示节点个数. 后面(n - 1)行,每行两个整数表示树的边. Output 每行一个整数,第i(i = 1,2,...n)行表示所有节点到第i个点的距离之和. Input示例 4 1 2 3 2 4 2 Output示例 5 3 5 5 思路:d…
1405 树的距离之和 题意 给定一棵无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离(最短路径)之和. 分析 树形DP. 首先我们让 \(1\) 为根.要开两个数组 \(up \ down\) 分别记录上面点.下面的点到当前点的距离之和.那么对于每个点答案就是 \(up[i] + down[i]\) . \(sons[u]\) 数组表示 \(u\) 以及它下面的所有子孙的数量. 显然 \(down[u]\) 是很好求的,当我们计算到某一点 \(u\) 时,当它的以 v 节点为根…
1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给定一棵无根树,如果它有n个节点,节点编号从1到n, 求随意两点之间的距离(最短路径)之和. Input 第一行包括一个正整数n (n <= 100000).表示节点个数. 后面(n - 1)行,每行两个整数表示树的边. Output 每行一个整数.第i(i = 1,2,...n)行表示全部节点到第i个点的距离之和. Input演示样例 4 1 2 3 2 4 2 Outp…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 中文题面不解释了,两次dfs,第一次自下向上,第二次自上向下. ans[i]表示i节点的答案,cnt[i]表示i节点为root的子树的节点个数,d[i]表示i节点为root的子树的答案. //#pragma comment(linker, "/STACK:102400000, 102400000") #include <algorithm…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 题意: 思路: 先求出所有点到根节点的距离,需要维护每棵子树的大小,然后就可以再来一次dfs依次求出别的点的距离.好像需要手动扩栈. #pragma comment(linker, "/STACK:10240000,10240000") #include<cstdio> #include<cstring> #include<…
1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input 第一行包含一个正整数n (n <= 100000),表示节点个数. 后面(n - 1)行,每行两个整数表示树的边. Output 每行一个整数,第i(i = 1,2,...n)行表示所有节点到第i个点的距离之和. Input示例 4 1 2 3 2 4 2 Output示例 5 3…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 (1)我们给树规定一个根.假设所有节点编号是0-(n-1),我们可以简单地把0当作根,这样下来父子关系就确定了. (2)定义数组num[x]表示以节点x为根的子树有多少个节点,dp[x]是我们所求的--所有节点到节点x的距离之和. (3)在步骤(1)中,其实我们同时可以计算出 num[x],还可以计算出每个节点的深度(每个到根节点0的距离),累加全部节点…
线段树的任意一棵子树都相当于节点数与该子树相同的线段树.于是假装在树形dp即可,记忆化搜索实现,有效状态数是logn级别的. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<map> using namespace std; #define…
根据最近做的几道树形dp题总结一下规律.(从这篇往前到洛谷 P1352 ) 这几道题都是在一颗树上,然后要让整棵树的节点或边 满足一种状态.然后点可以影响到相邻点的这种状态 然后求最小次数 那么要从两个维度来设计状态 第一个维度 (1)以i为根的树的所有节点都满足这种状态 (2)以i为根的树的只有i不满足这种状态 第二个维度 (1)i这个点取 (2)i这个点不取 所以就会有四种状态,不过最近几道题都是直接pass掉了其中一种 只有三种状态. 状态设计好了就很好写转移方程了,记住转移的过程中孩子一…
题意 给一棵树,你可以匹配有边相连的两个点,问你这棵树的最大匹配时多少,并且计算出有多少种最大匹配. N≤1000,其中40%的数据答案不超过 108 题解 显然的树形DP+高精. 这题是作为考试题考的,因为记得有一次考试,状态用两个数组存. 所以看到这题瞬间想到状态dp[i][0/1]代表以i为根的子树不选/选i点的最大匹配数. f[i][0/1]代表以i为根的子树中不选/选i形成最大匹配的方案数. 然后方程改了半天:而且极长所以看代码吧. TM还要加高精... (第一个点挂了,特判过的) #…