摘要:
[SDOI2011]消耗战 题意:一棵树上给定点集,求到根的最小割。 每次询问只和给定的点集以及它们的LCA有关系,那么把这些点拿出来建立一棵树。再进行树DP。具体操作把所有询问点按照dfn排序,再用一个栈进行维护建树。弹栈的时候并不是每个点都和栈中第二个元素连边,有可能最后一个弹栈点和新的LCA连 阅读全文
摘要:
In case of failure 题意:二维平面,求每个点与它最近的点的距离。 KD树模板。依次选择每个维度进行划分建树。也可以选择方差最大的一维进行划分。随机划分也过了。奇怪的是用定义求方差一直TLE,用D(X) = E(X^2) - E(X)^2 就没有问题,可能是爆精度?最简洁的实现是每个 阅读全文
摘要:
Coverthe Polygon with Your Disk 题意:给定一个最多10个点的凸多边形,和一个圆,求圆与多边形相交的最大面积。 根据圆坐标的不同,面积交为一个二维凸函数。那么就有多种方法。 梯度下降,比较可靠的方法,过程相当于爬山。具体做法,对当前所在点求x,y的偏导,走的方向就是两个 阅读全文
摘要:
苹果树 把点分治的过程所有重心连成一颗树,那么这颗树高为logn。预处理重建树上每个节点到所有子节点的距离(原树上的距离)。对于每次查询和修改,在重建树上不断往上跳,每个节点开一个动态开点的线段树,进行查询。由于树高是logn的,所以时间复杂度为nlognlogn。空间复杂度也为nlognlogn。 阅读全文
摘要:
[国家集训队]Tree II 维护链权值和,同时支持链加乘操作。类似线段树维护加乘操作。打两个标记,分别为乘,加,遇到加法直接更新标记,遇到乘法更新两个标记。下放标记时先放乘,后放加。由于pushup要更新sum,所以还需要维护树的大小。 每个Splay的根节点信息不一定要随时正确的,因为所有操作必 阅读全文
摘要:
最短路 查询仙人掌两点之间的最短路。建立圆方树,圆-方之间连边为圆点到所在环顶部的最短距离,圆-圆之间连边就是原图边的距离。每个询问查询LCA,若LCA为圆点,就是这两点之间的距离,若LCA为方点,获取LCA下面两个点x,y,x和y处于一个环中,求环中两点最短距离。 #include<bits/st 阅读全文
摘要:
Census 求矩形区域最大最小值,单点修改。 建立x方向的线段树,x方向线段树的每个节点都是一个y方向的线段树。查询复杂度log(n)*log(m),单点修改复杂度log(n)*log(m)。修改时对于x的叶节点和非叶节点需要区别对待。 #include<bits/stdc++.h> using 阅读全文
摘要:
[BZOJ1023][SHOI2008]cactus仙人掌图 仙人掌的直径。不在环上的边按照树处理,在环上的边先留下来,把从环上分岔处理完,再用单调队列环形DP处理。 #include<bits/stdc++.h> using namespace std; const int N=5e4+10; c 阅读全文
摘要:
[BZOJ4316]小C的独立集 先把环上的分支处理掉,结果保留到环的点上。再处理环形DP,在tarjan的过程开个栈,环从栈中弹出来,一定要注意弹环的边界不能用x,因为x还可能先走到了其它环中。 #include<bits/stdc++.h> using namespace std; const 阅读全文
摘要:
前言 算法竞赛进阶指南图论习题。慢慢刷。 Sightseeing 这个题求最短路以及比最短路大1的路的条数。关键是次短路如何构成。分析可以发现一个点的次短路一定为相邻点次短路或者最短路构成。所以dijkstra维护最短路和次短路即可。 #include<cstdio> #include<cstrin 阅读全文