随笔分类 -  图论--树--lca

摘要:$n \leq 100000$的树,每个点有个糖,$m \leq 100000$种糖,每种糖好吃度$V_i$,吃$j$颗$i$糖会得到愉悦值$V_i*W_j$,$q \leq 100000$个操作:修改一个点上的糖;查询某条链上吃糖的愉悦值。 首先看看能不能用啥数据结构维护。麻烦。好上莫队。 树上的 阅读全文
posted @ 2018-03-16 09:22 Blue233333 阅读(174) 评论(0) 推荐(0)
摘要:$n \leq 500000$的树给$m \leq 500000$个路径,$q \leq 500000$个询问每次问一个区间的路径交。 路径交口诀:(前方高能) 判有交,此链有彼祖; 取其交,最深两两祖。 说成人话就是:判两条路径有没有交,只要一条链的lca在另一条链上就一定有交;取两条路径的交,把 阅读全文
posted @ 2018-03-14 07:38 Blue233333 阅读(302) 评论(0) 推荐(0)
摘要:n<=100000,m<=500000的图有点权边权,q<=500000个询问每次问从x出发经过不超过y的边权能到的点权第K大,加强版强制在线。 Emmmmmm有一个漂亮的方法来转化,就是对原图做MST,做的时候要连接两个点时不要直接连,新开一个点然后让这两个点连上这个点。 这样就把边权挂到树上了, 阅读全文
posted @ 2017-12-01 19:34 Blue233333 阅读(227) 评论(0) 推荐(0)
摘要:n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线。 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的信息即可。然后比如要问x点和y点,z为lca(x,y),w为z的爸爸,那么x,y,z,w四棵线段树一起跑即可。 阅读全文
posted @ 2017-11-30 07:14 Blue233333 阅读(166) 评论(0) 推荐(0)
摘要:n<=1e5的有根点权树,m<=1e5个操作:换根,修改点权,查询子树最小值。 维护子树信息--dfs序,至于换根只需要分类讨论一下现在根和查询点的关系。 如果查询的点是根节点,就输出整颗树的最小值。 如果查询的点5在1到7的路径上,那以7为根的时候查询5,就是整颗树排除粉红色部分--5的儿子中,是 阅读全文
posted @ 2017-10-19 10:55 Blue233333 阅读(495) 评论(0) 推荐(0)
摘要:n<=1e5个点的树有边权,m个询问,每次问max dis(i,j) a<=i<=b,c<=j<=d。 结论:一个区间的最远点对,要么是其左半区间的最远点对,要么是其右半区间的最远点对,要么是左右半区间最远点对的四个点的互相组合之一。如下图: 两个集合最远点对分别是A-B,A并B的最远点对是红A-蓝 阅读全文
posted @ 2017-10-10 22:08 Blue233333 阅读(438) 评论(0) 推荐(0)
摘要:求三个人从a,b,c这三个位置跳到x,y,z最少多少步。跳:任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 从它跳的性质出发,向内跳只有一种操作,而向外跳有两种。这就是说,每个状态可以找到一个唯一前趋,有两个后继。这是一棵二叉树!求两个状态的最短路就是求他们到l 阅读全文
posted @ 2017-10-10 08:11 Blue233333 阅读(345) 评论(0) 推荐(0)
摘要:n<=300000个点的树,每个点有个人于第Ti秒观测,有m<=300000个人于时间0开始从Sj跑到Tj,速度1个点每秒,输出每个点上的人观察到的跑步的人的数量。 前25分:直接模拟每条路径,先s跑到lca再跑到t,边跑边记时间,如果经过某个点时时间刚好一样就该点答案++。 Si等于1的20分:观 阅读全文
posted @ 2017-09-14 16:11 Blue233333 阅读(579) 评论(0) 推荐(1)
摘要:n<=100000个点的树,每个点属于一个K<=n/2个集合中的一个,每个集合至少两个点,求每个集合中任选两点距离的最大值。 方法一:什么都看不出来,点分,每次只统计经过一个点的每个集合的不同子树的路径来更新。详见http://www.cnblogs.com/Enceladus/p/6099250. 阅读全文
posted @ 2017-08-29 16:01 Blue233333 阅读(220) 评论(0) 推荐(0)