摘要:
Link: Codeforces 35E 传送门 Brief Intro: 给定$n$个矩形,求出轮廓线的所有顶点 Solution: 对于此类可拆分成多个事件点的题目,使用扫描线的方式 将每个矩形分为起始边和终止边两个事件,排序,按顺序扫描 分类讨论: 维护当前最高的高度, (1)如果是起始边,判 阅读全文
摘要:
Link: BZOJ 3144 传送门 Solution: 发现要把点集分成不连通的两部分,最小割的模型还是很明显的 首先我们将原图转化为$R+1$层,从而将点权化为边权 关键还是在于建图是怎么保证$|h_i-h_j|<=D$这个条件 要保证$|h_i-h_j|<=D$这个条件也就意味着选了$i$就 阅读全文
摘要:
Link: BZOJ 2429 传送门 Solution: 可将题意转化为求使原图连通的子图中最长边的最小值, 那么立即联想到求最小生成树的Kruscal算法:每次选择最短的边加入答案集合 最小生成树的最长边就是要求的值 正确性是显然的(边权是从小到大选取的),而这也是最小生成树的推论之一: 对于任 阅读全文
摘要:
Link: BZOJ 3155 传送门 Solution: 我们发现要维护的序列的每一项都有$i$项要维护, 我们要将每一项转化为只有1项要维护才能$log(n)$维护(否则每对一个值更新要更新$n$个值) 于是我们将每一项拆为两个前缀和相减, 开两个树状数组,第一个维护$a[i]$前缀和,第二个维 阅读全文