
DSU
文章平均质量分 82
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
HDU6305: RMQ Similar Sequence 题解
Description Chiaki has a sequence A={a1,a2,…,an}. Let RMQ(A,l,r) be the minimum i (l≤i≤r) such that ai is the maximum value in al,al+1,…,ar. Two sequences A and B are called \textit{RMQ Similar}, if...原创 2018-07-23 23:41:24 · 505 阅读 · 0 评论 -
AtCoder Regular Contest 097D: Equals 题解
我们可以把这种交换规则想象成一张图,有一个NNN个点的图,题目中的(xi,yi)(xi,yi)(x_i,y_i)相当于图中的边 我们可以发现一个连通块内的元素是可以任意互换位置的 所以对于每一个a[i]a[i]a[i],我们只要判断第iii个格子和第a[i]a[i]a[i]个格子是否联通就好,用并查集可以轻松的做到这一点 #include <bits/stdc++.h> us...原创 2018-05-14 15:39:01 · 438 阅读 · 1 评论 -
Codeforces #319E: Ping-Pong 题解
这道题给的一个条件十分奇怪:区间(a,b)能转移到区间(c,d)当且仅当 c<a<dc<a<dcc<b<dc<b<dc⊂⊂\subset (c,d) 这两种情况又有区别:第一种情况下(a,b)和(c,d)互相联通,而第二种情况只能(a,b)–>(c,d). 如果说第一种情况可以用并查集维护的话,第二种情况就十分难处理 另外题目有一个特殊的...原创 2018-03-28 22:40:44 · 532 阅读 · 0 评论 -
Codeforces #920F: SUM and REPLACE 题解
打一个表可以发现1e6以内的数都可以在6次求约数个数操作内变为2和1所以更新操作不会很多所以可以用树状数组来更新,并用并查集维护哪些格子还没有降到2和1#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cstdlib> ...原创 2018-03-01 11:16:18 · 323 阅读 · 0 评论 -
BZOJ1016: 最小生成树计数 题解
显然的是,不同的生成树的不同权值的边数一定是一样的 我们可以先跑一遍kruskal把每种边需要多少条记录一下 然后由于相同权值的边不超过10条,所以在相同权值的边内部搜一下,看哪些边加进原图无环 然后乘法原理和前面的答案乘一下 不同的选择方法对后面的并查集的更新肯定是没有影响的,不然一开始的kruskal不会这样选边 所以可以随便选一组边加入并查集,然后继续做后面的权值 注意由原创 2018-01-17 10:16:42 · 285 阅读 · 0 评论 -
Codeforces #848C: String Reconstruction 题解之花样虐题
显然的是,没有被赋过值的点,赋上a能保证字典序最小 不论何种方法,最终的目的是不要让一个位置被重复赋值 这题最重要的注意点是,区间可以从1e6开始,长度是1e6,所以字符串数组ans要开到2e6 另一个注意点是,对于要将所有字符串存下来做统一处理的做法,因为不确定每个字符串的长度,开的太大会mle,所以逼不得已要用string,裸的cin读入会超时 别忘了加ios::sync_wi原创 2017-07-13 20:48:51 · 439 阅读 · 0 评论 -
Codeforces #356C: Knight Tournament 题解
这题看到后我的第一想法是用set 开一个set存储当前还存活的人 每次给一个l和r后,在set里lower_bound一下,然后除了胜利者的人都erase掉 因为每个元素进set一次,出set一次,所以是O(nlogn)的 #include #include #include #include #include #include #include #include #inc原创 2017-07-13 20:27:26 · 285 阅读 · 0 评论 -
Codeforces #722C: Destroying Array 题解
这题我看到以后想到的最显然的做法是set 对数组做一个前缀和 先开一个set来存各个线段的开始和结束,再开一个multiset(一定要是multiset因为和可能会有重复)存所有线段的和 当删除一个点x时,先在set1中找到这个点所在的线段的左右端点,求出这个线段的原本和,在set2中删除,然后把l~x, x~r压入set1,set2 记得开long long #include #in原创 2017-07-13 20:21:26 · 299 阅读 · 0 评论