树
Self-Discipline
在校大学生
展开
-
牛客国庆集训派对Day6 J-最短路
题目:点击打开链接题意:略。分析:(lca+100次最短路)先把题目给的边存起来,先取n-1个边(不能有环)构成生成树,然后求lca,对于漏掉的边u<-->v,假设x到y的最短路不走这条边,那么其最短路有可能是lca的距离,假设走这条边,必走u,那么我先求出起点为u到所有点的最短路,x到y的距离就是min(lca , d[u][x]+d[u][y])。(不明白的可以画个草图)由于边...原创 2018-10-17 22:22:14 · 232 阅读 · 0 评论 -
倍增法实现LCA(以HDU - 2586为例)
题目:点击打开链接题意:求树上任意两点之间的距离。分析:LCA模板题,这是一棵无根树,把它转化为有根树,再用倍增LCA求出每个结点到根节点的距离,两点的距离:dist = dis[u] + dis[v] - 2 * dis[ LCA(u,v) ],复杂度O(nlogn)。倍增法求LCA入门参考https://blog.csdn.net/lw277232240/article/details/7...原创 2018-10-17 19:49:05 · 345 阅读 · 0 评论 -
哈夫曼编码
题目:给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 'a'、'x'、'u'、'z' 的出现频率对应为 4、2、1、1。我们可以设计编码 {'a'=0, 'x'=10, 'u'=110, 'z'=111},也可以用另一套 {'a'=1, 'x'=...原创 2019-03-19 16:22:41 · 4788 阅读 · 0 评论 -
奇数路径
题目:统计一棵树上长度为奇数的路径的条数。分析:对树上的顶点进行黑白染色,奇数路径端点必然是一黑一白,答案就是黑色顶点的数量与白色顶点的数量的乘积。代码:#include<bits/stdc++.h>using namespace std;#define ll long longconst int N = 1e5+10;int v[N],n;vector<...原创 2019-03-17 22:56:05 · 392 阅读 · 0 评论 -
二叉搜索树的最近公共祖先
题目:7-15二叉搜索树的最近公共祖先(30分)给定一棵二叉搜索树的先序遍历序列,要求你找出任意两结点的最近公共祖先结点(简称 LCA)。输入格式:输入的第一行给出两个正整数:待查询的结点对数 M(≤1 000)和二叉搜索树中结点个数 N(≤10 000)。随后一行给出 N 个不同的整数,为二叉搜索树的先序遍历序列。最后 M 行,每行给出一对整数键值 U 和 V。所有键值...原创 2019-03-19 09:34:30 · 5088 阅读 · 0 评论 -
HDU 6458 Checkout
题意:CheckoutTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 35Accepted Submission(s): 16Problem DescriptionAlice是一个身怀改变世界的抱负的著名...原创 2019-07-17 19:07:10 · 225 阅读 · 0 评论 -
HDU 6567 Cotree 树的重心(树的重心)
题意:给定n的点,n-2条边,也就是给出了两棵树,要求加一条边连接两棵树并使得连接好的这棵树上任意两点距离和最小。分析:树的重心一个很重要的性质就是所有点到当前点的距离和最小。容易(猜)想到连接两棵树的重心就是最优方案。再统计任意点距离和,树形dp就可以解决。开始还想着树的直径的中点,仔细一想发现不对,树的直径的中点和重心的都弄混了。。。代码:待补。...原创 2019-08-10 20:23:22 · 183 阅读 · 0 评论 -
CodeForces 455C
题意:给定N,M和Q,N表示有N个城市,M条已经修好的路,修好的路是不能改变的,然后是Q次操作,操作分为两种,一种是查询城市x所在的联通集合中,最长的路为多长。二是连接两个联通集合,采用联通之后最长路最短的方案。分析:两树合并时,设直径分别为len1,len2,新树直径为max(len1,len2,(len1/2)+(len2/2)+(len1%2)+(len2%2)+1),即两颗旧树的直径,...原创 2019-08-11 00:21:20 · 226 阅读 · 0 评论 -
Codeforces 61D. Eternal Victory(树的性质)
题意:从起点开始访问所有的节点,要求边权和最小。分析:可以贪心找到规律,除了从起点到终点一条路径,剩余每条边都访问了两次,所以问题变成了寻找从起点开始的最长路径,答案就是边权和*2-最长路径。代码:#include<bits/stdc++.h>using namespace std;#define ll long longconst int N = 1e6+5;i...原创 2019-08-15 16:22:33 · 350 阅读 · 0 评论