树形结构
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
Walk
【问题描述】 给定一棵n个节点的树,每条边的长度为 1,同时有一个权值 w。定义一条路径的权值为路径上所有边的权值的最大公约数。现在 对于任意i∈[1,n],求树上所有长度为 i的简单路径中权值最大的 是多少。如果不存在长度为 i的路径,则第 i行输出 0。 【输入格式】 第一行,一个整数 n,表示树的大小。 接下来n-1行,每行三个整数u,v,w,表示u,v间存在原创 2017-08-10 17:09:49 · 1156 阅读 · 0 评论 -
poj1655 Balancing Act(树的重心[模板])
DescriptionConsider a tree T with N (1 <= N <= 20,000) nodes numbered 1…N. Deleting any node from the tree yields a forest: a collection of one or more trees. Define the balance of a node to be the siz原创 2017-09-26 13:59:33 · 301 阅读 · 0 评论 -
bzoj1912 [Apio2010]patrol 巡逻(树的直径[变式])
Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2)。接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n)。Output 输出一个整数,表示新建了K 条道路后能达到的最小巡逻距离。Sample Input 8 1 1 2 3 1 3 4 5 3 7 5 8 5 5 6 Sampl原创 2017-09-27 10:00:30 · 419 阅读 · 0 评论 -
与dalao学校的联shou考wan(11.2)(dp+乱搞+树形dp+期望)
T1.hanoi题目描述 众所周知, 汉诺塔是一个古老又经典的游戏. 这个游戏是这样的, 你有 N 个大小不同的盘子和3 根柱子, 一开始所有盘子都叠放在第 1 根柱子上, 你需要把N 个盘子全都移动到第3根柱子上, 每次都可以选择某根柱子最上面的盘子移动到另一根柱子上, 但是任何时候都必须保证没有一个盘子上面放了一个比它大的盘子. 求最少的移动步数. 这个问题太简单了,原创 2017-11-02 16:04:57 · 618 阅读 · 0 评论 -
11.2 T3.tree(树形dp+期望)
题目描述 梦游中的你来到了一棵N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点u走到点v之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, 为了确保第二天能够准时到校, 你要求出每个梦期望经过多少条边才能苏醒. 为了避免精度误差, 你要输出答案模1e9 + 7的结果.输入格式 第一行两个整数分别代表N 和Q. 接下来N-1 行,原创 2017-11-02 17:57:29 · 1214 阅读 · 0 评论 -
关于一棵树
树的直径(Diameter)是指树上的最长简单路一棵n个点的树,每条边都有边权w, 求一条路径使得它的权值和最大一、边权保证非负直径的求法:两遍BFS (or DFS)任选一点u为起点,对树进行BFS遍历,找出离u最远(权值最大)的点v 再以v为起点,再进行BFS遍历,找出离v最远(权值最大)的点w 则v到w的路径长度(权值)即为树的直径 于是原问题可以在O(E)时间内求出简单证明 关键在原创 2017-08-11 07:32:37 · 391 阅读 · 0 评论 -
TyvjP1520 树的直径(模板)
题目链接分析: 我曾经谈过树的直径 但是只停留在理论阶段,不会实现 今天就来填这个史前巨坑我在blog提到过: 设计状态: f[i]表示i这棵子树中经过i的最长路径(可以经过i也可以是i作为途中一点) g[i]表示i这棵子树中,以i为端点的最长路径f[fa]=max(firstmax{w(fa,u)+g[u]},0)+max(secondmax{w(fa,u)+g[u]},0) g[f原创 2017-09-26 20:30:37 · 319 阅读 · 0 评论 -
10.26 T3.蚊子(mosquito) (树形dp)
【题目描述】 作为一只明媚的兔子,要会叠被子,又得会打蚊子… 兔子住在兔子洞里.兔子洞可以看成是一棵无根树,有n个洞穴,有n-1条通道连接着n个洞穴. 每天晚上,兔子会在1号洞穴里缩成一团,睡一觉.同时,蚊子大军出动,去欺负兔子. 因为蚊子人多势众,所以它们分兵m*(m-1)路.m是整个兔子洞中只和一条通道相邻的洞穴数目.任意两个这样的洞穴a,b之间(也就是任意两个叶原创 2017-10-26 16:00:12 · 770 阅读 · 0 评论 -
与别校的联hu考zuo(11.4)
T1.kill题目描述 有n个人要完成任务,每个人的任务是:从他们当前的位置出发,打倒1个怪物,然后返回任务交付点。 现在郊区一共有m只怪物,所有人,所有怪物以及任务交付点在一条直线上,现在告诉你每个人所在的位置,以及每个怪物的位置 ,任务交付点的位置为s,你需要给每个人选择一只怪物去打。要求每个人都有一只怪物打,每个怪物最多被一个人打,假如所有人同时开始任务,你需要最小化最晚完成任务的人所需要原创 2017-11-05 14:54:07 · 481 阅读 · 0 评论 -
与不知道什么学ping校ce的ji联zha考le(11.5)
T1.attackT2.reverse分析: 实际上我们是可以倒推出每个状态的前驱 所以我们先把长度长的字符串向前推,直到两个字符串长度相同 之后两个字符串同时向上推,直到达到第一个相同的状态 形象点来说:我们可以把状态集合想象成一棵树,一操作是向左子树走,二操作是向右子树走 我们所求就是两个节点的lca这道题还涉及字符串hash,还是有点难度的T3.tree原创 2017-11-05 17:04:11 · 428 阅读 · 0 评论 -
bzoj1086 [SCOI2005]王室联邦(树分块)
题目链接分析: 很有意思的一道题 最开始看这道题,感觉不难,就YY了一种做法: dfs整棵树,如果某子树的大小满足条件就划分成一个“省”,省会就是子树的根 如果有剩下的点,那么这些点一定集中在根的部分 我们视情况把ta们分成新的一个省份,或者并到最后分出的一个省份中写完了当然是WA啦 后来才考虑到,如果有一棵树只有两层,儿子非常多,这样把子树整体考虑可能就不行了正解: 我们要从分利用这原创 2018-01-04 20:36:59 · 263 阅读 · 0 评论 -
充满bug的hu测(1.14)
上午loli只给了我们三个半小时 给了我们三道没有文件名且来路不明的题 评测的时候没有“忽略行末空格和回车”,导致分数非常的鬼。。。三道题的码量都比较小 但是思维难度还是比较大的T1T2 分析: 考虑每条边的贡献 每条边可以把整棵树分成两部分:设左边有aa个乘客bb辆车,右边有cc个乘客dd辆车 那么这条边的贡献系数就是min(a,d)+min(b,c原创 2018-01-14 17:43:13 · 352 阅读 · 0 评论 -
bzoj2286 [Sdoi2011]消耗战(树形dp+虚树)
题目链接分析: 显然是一道dp,那我们就想方程吧 一开始dp的方程不是很成熟: 设计了一个状态f[i][0/1]" role="presentation" style="position: relative;">f[i][0/1]f[i][0/1]f[i][0/1],表示是否选择第 i" role="presentation" style="position: relative;">ii原创 2018-02-01 10:37:52 · 289 阅读 · 0 评论 -
虚树
前言: 舒老师表示虚树不用学,但是看到ZYX在看,所以就了解一下吧引入有这样一类问题:给出一棵n" role="presentation" style="position: relative;">nnn个结点的树(n" role="presentation" style="position: relative;">nnn为1e5级别),每次指定m" role="presentatio原创 2018-01-31 21:25:33 · 1386 阅读 · 0 评论 -
bzoj3611 [Heoi2014]大工程(树形dp+虚树)
题目链接分析: 建出虚树 考虑如何dp:虚树中只存在关键点和ta们两两之间的lca" role="presentation" style="position: relative;">lcalcalca 一开始我的想法超简单: sum" role="presentation" style="position: relative;">sumsumsum就是树上所有边的和 minans原创 2018-02-01 16:18:19 · 261 阅读 · 0 评论 -
UVa1218 - Perfect Service(树形dp)
题目链接分析:f[u][0]:u是服务器,u的父亲不是服务器,那么u的儿子可以是服务器,也可以不是f[u][1]:u不是服务器,但是u的父亲是服务器,那么u的儿子一定不是服务器f[u][2]:u不是服务器,u的父亲也不是服务器,那么u的儿子中恰好有一个是服务器f[u][0]=sum{min(f[son][0] , f[son][1])}+1f[u][1]=sum{f[son][2]}f[u]原创 2017-11-01 14:59:34 · 294 阅读 · 0 评论 -
UVa 11354 - Bond(最小生成树+倍增lca)
题目链接简介: 最小瓶颈路,点对之间的路径中的最大边权分析: 肯定是先求出最小生成树(一看到瓶颈路,就要往这方面想,当然也不是绝对的)因为需要回答大量的查询,我们就需要把信息组织成某种易于查询的结构一开始我认为可以直接像例一这样n^2处理,O(1)回答 但是n的范围不允许我这样干, 所以我们还是用最古老的方法:倍增那么这道题就和货车运输有异曲同工之妙了tip代码量有点大//这里写代码片#i原创 2017-10-11 18:35:35 · 342 阅读 · 0 评论 -
dsu on tree
鸣谢yvehyveh:看看我还有什么压箱底的东西http://blog.csdn.net/qaq__qaq/article/details/53455462原创 2017-08-24 20:06:25 · 353 阅读 · 0 评论 -
codeforces600E. Lomsat gelral(dsu on tree)
You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let’s call colour c dominating in the subtree of vertex v if there are no other colours that appear in the su原创 2017-08-24 21:38:35 · 397 阅读 · 0 评论 -
Kruskal重构树
讲解&模板 http://blog.csdn.net/wu_tongtong/article/details/77601523上面那个代码是我自己yy的 这个是从网上扒拉的dalao的kruskal重构树模板 基本思路也是一样, 维护一个类似并查集的东西其中有按秩合并和路径压缩 据说这样并查集的时间复杂度才有保证树的记录方式:爸爸记录法(只记录父亲) 没有必要把树上的边都连起来 结点深原创 2017-08-26 15:46:34 · 4064 阅读 · 0 评论 -
bzoj3551 [ONTAK2010]Peaks加强版(Kruskal重构树+主席树)
Description在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1。Input第一行三个数N,M,Q。 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到原创 2017-08-26 16:04:58 · 362 阅读 · 0 评论 -
bzoj2588 Spoj 10628. Count on a tree
Description给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。Input第一行两个整数N,M。 第二行有N个整数,其中第i个整数表示点i的权值。 后面N-1行每行两个整数(x,y),表示点x到点y有一条边。 最后M行每行两个整数(原创 2017-08-28 09:19:03 · 261 阅读 · 0 评论 -
poj3107 Godfather(树的重心)
DescriptionLast years Chicago was full of gangster fights and strange murders. The chief of the police got really tired of all these crimes, and decided to arrest the mafia leaders.Unfortunately, the s原创 2017-09-26 14:46:36 · 322 阅读 · 0 评论 -
Tyvj1052
题目链接做这道题的时候有点颓了 有思路后,看的题解才A掉这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int INF=0x33333333;const int N=6050;struct node{ int x,y,nxt;};node way[N<<1];原创 2017-08-31 21:48:33 · 240 阅读 · 0 评论 -
bzoj4033 [HAOI2015]树上染色(树形)
Description 有一棵点数为N的树,树边有边权。给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益。 问收益最大值是多少。Input 第一行两个整数N,K。 接下来N-1行每行三个正整数fr,to,dis,表示该树中存在一条长度为dis的边(fr,to)。原创 2017-09-27 16:47:17 · 530 阅读 · 0 评论 -
校内的hu测(10.5)
@liu_runda 这次的hu测,扒的是衡水中学lrd大神出的noip模拟题简单来看一下吧:T1.简(simple)【题目描述】 大道至简.这就是出题人没有写题目背景的原因. 给出2n个数字,将它们划分成n组,每组的得分为这一组中两个数字的较小值. 求最大得分. 【输入格式】 第一行一个整数n表示正整数的数目. 接下来一行2n个空格隔开的整数a1,a2…a2n 【输出格式】 一原创 2017-10-05 14:23:22 · 776 阅读 · 0 评论 -
[trick]dsu on tree
原网址(鸣谢Yveh) UPD 17.3.27:这个技巧实际上局限性也很明显。第一只能支持子树查询,第二不支持修改操作。概述写这篇文章的原因是NOIP前刷Codeforces做到一道题,用这种方式,以很低的代码复杂度做到的优秀时间复杂度。 于是我学习了一下CF上这篇文章,翻译过来安利一下,也算作是自己的学习笔记吧。什么是dsu on treed...转载 2017-10-18 21:25:57 · 573 阅读 · 0 评论 -
randomwalking(10.2hu测)
分析: 当时看到概率期望,光速弃疗 写了一个n^2暴力,30分稳那我们就来看看正解: son记录和该节点直接相连的结点个数 两遍dfs 第一遍从叶子向根转移 第二遍dfs稍微有点难理解 第二遍dfs处理以每个点为起点的概率(就是答案啦) 从根向叶子转移 f[1][0]=f[1][1] //这里写代码片#include<cstring>#include<iostream>原创 2017-10-02 14:21:52 · 384 阅读 · 0 评论 -
bzoj3732 Network(Kruskal重构树)
Description给你N个点的无向图 (1 <= N <= 15,000),记为:1…N。 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000).现在有 K个询问 (1 < = K < = 20,000)。 每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?Inpu原创 2017-08-26 15:12:29 · 2387 阅读 · 0 评论 -
UVa12186 - Another Crisis(树形dp)
题目链接简介: 一个公司有1个老板和n个员工,n个员工中有普通员工和中级员工 现在进行一次投票,若中级员工管理的普通员工中有T%的人投票,则中级员工也投票并递交给上级员工 求最少需要多少个普通员工投票,投票才能到达老板处分析: 基础的树形dp,供消遣 为了方便,用一个vector存储结点的儿子 设f[i]表示为了让信息传到i,需要的最少人数唯一有一点不直白的就是我们需要计算到底至少需要多原创 2017-10-31 21:58:11 · 788 阅读 · 0 评论 -
UVa10859 Placing Lampposts(双元限制的dp)
题目链接分析: 改改题面我就能A了 —————yyp原创 2017-10-08 10:29:53 · 376 阅读 · 0 评论 -
bzoj1060 [ZJOI2007]时态同步(树形dp)
Description 小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间...原创 2017-08-11 10:52:29 · 248 阅读 · 0 评论