题目就是求树上每个节点的所有祖先中(ci-cj)/(dj-di)的最小值。 那么就是(ci-cj)/(di-dj)的最大值了。 对于每一个点,它的(ci,di)都是二维坐标系里的一个点 要求的就是祖先节点的所有点与目前节点连线的最小斜率 比较容易想到单调栈优化,像斜率优化dp一样 但是关键是本题在树 ...
分类:
其他好文 时间:
2019-08-18 09:30:30
阅读次数:
69
之前学斜率优化的锅,凸包没学会,当时是不等式搞过去的,考试时妄想推出和u无关,只和祖先有关的不等式,失败。。。 先看式子(c[fa]-c[son])/(dep[son]-dep[fa]),看起来很别扭,尝试加负号,就变成了斜率(我们以dep为x轴,dep为y轴建坐标系),要求斜率最大,为下凸包, 这 ...
分类:
其他好文 时间:
2019-08-18 09:18:17
阅读次数:
96
浅谈二分 来自8,17考试模拟24。 本题: 单调凸包。(找凸包方向:联系高考数学线性规划) 弹栈操作是一个个向后弹的。序列转换为树上。对于树上结构,只需记录父子关系,即可还原出一整棵树。因为要可持久化,那么这里的栈也变为了树状。只需记录在栈里的父亲即可。甚至不用开一个数组作为栈。由于单调性,搭配倍 ...
分类:
其他好文 时间:
2019-08-17 22:23:36
阅读次数:
117
题目:POJ-1330 题目大意:给你一棵含有n个结点的树,n-1条边,问两个结点的最近公共祖先是哪个节点。 普通做法 思路:让两个结点到达同一深度,再一起往上走,到达同一结点即为最近公共祖先。 例:3和7,让3往上走到16,与7同一深度后,再一起一步步往上走,到达4时,为同一个结点,即为其最近公共 ...
分类:
编程语言 时间:
2019-08-17 21:42:00
阅读次数:
96
" 传送门 " Solution 基环树+倍增+双指针 第一次因为 而玄学RE 为什么标程都不用开$long long$啊 Code c++ / 玄学RE 看来又是define ll long long 也有bug / include define ll long long define doubl ...
分类:
其他好文 时间:
2019-08-11 23:03:42
阅读次数:
98
一、线性 1.简单示例 (1)LIS问题 (2)LCS问题 (3)数字三角形 二、背包 1.0/1背包 2.完全背包 3.多重背包(二进制拆分) 4.分组背包 三、区间 四、树形 1.背包类 2.二次扫描与换根法 五、环形与后效性处理 六、状态压缩 七、倍增优化 八、数据结构优化 九、单调队列优化 ...
分类:
其他好文 时间:
2019-08-11 17:00:57
阅读次数:
107
一、搜索 1.迭代加深 2.估价函数 3.IDA* 二、贪心 三、二分 四、分治 1.序列分治 2.CDQ 分治 3.点分治 4.边分治 5.动态点分治 6.动态边分治 五、倍增 1.快速幂 2.矩阵快速幂 3.ST 表 4.LCA 5.其他 ...
分类:
编程语言 时间:
2019-08-11 10:35:19
阅读次数:
89
首先安利自己倍增求LCA的博客,前置(算不上)知识在此。 LCA有3种求法:倍增求lca(上面qwq),树链剖分求lca(什么时候会了树链剖分再说。),还有,标题。 是的你也来和我一起学习这个了qwq。 开始吧。 众所周知,每当你dfs时,你都能产生一棵dfs树,可以根据你的dfs序来构建。 suc ...
分类:
其他好文 时间:
2019-08-10 21:39:46
阅读次数:
142
@[TOC] 什么是树链剖分? 指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链,主要用来维护树上每条链的极值或和之类的。 类似 首先把树上倍增摆在前面,如果不会树上倍增就不必来看树链 ...
分类:
其他好文 时间:
2019-08-10 21:07:51
阅读次数:
90
考虑点分治,将询问离线后计算重心到每一个点的线性基,然后再询问重心到每一个点的线性基,时间复杂度为$o(3600q)$,可以过(然而太菜的我写了倍增维护线性基,震惊于倍增和线性基常数之小) 1 #include<bits/stdc++.h> 2 using namespace std; 3 #def ...
分类:
其他好文 时间:
2019-08-10 09:32:28
阅读次数:
82