我最近是不是数据结构学傻了啊... 这道题看是1e5,所以复杂度为\(O(nlogn)\)的是完全可以跑过去的,然后看题,要求的对于每个数满足要求的区间的长度之和,我们自然而然的就可以想到用FHQ-Treap来维护这个序列了. - ps:不会FHQ的小伙伴们可以学习一下,这也是一个比较好用的数据结构(特别是打暴力). 然后事情就很好办了.先建一个一颗平衡树,然后每次查询的时候直接用我们可奈的split操作分出满足条件的区间,然后直接统计答案即可. 但是有一个小小的问题,我们每次分出来的序列没有包…
斯坦纳树复习,我暑假的时候好像写过[JLOI2015]管道连接来着. 设$f_{i, s}$表示以$i$为根,$k$个重要点的连通状态为$s$,($0$代表没有连进最小生成树里面去,$1$代表连进了最小生成树里面去)的最小代价,那么可以写出两种转移. 1.$f_{i, s} = min(f_{i, t} + f_{i, s ^ t})$ $t \in s$. 2.$f_{i, s} = min(f_{j,s} + val(j, i))$ 存在一条边$(j, i)$的权值为$val(j, i)$.…
题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样的元件,你想将其排列成 N 行 M 列放在电路板上.电路板的左上角连接电源,右下角连接灯泡.试求:至少要旋转多少个正方形元件才能让电源与灯泡连通,若无解则输出 NO SOLUTION. Casper is designing an electronic circuit on a N×M rectan…
「SCOI2015」小凸玩密室 题意 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个权值 $ B_i $ . 点亮第 $ 1 $ 个灯泡不需要花费,之后每点亮一个新的灯泡 $ V $ 的花费,等于上一个被点亮的灯泡 $ U $ 到这个点 $ V $ 的距离 $ D(u, v) $,乘以这个点的权值 $ A_v $. 在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点…
问题描述: 林记在做数学习题的时候,经常遇到这种情况:苦思冥想了很久终于把问题解出来,结果发现答案是0,久而久之林记在得到习题答案是0的时候就没有了做出一道难题的成就感.于是林记决定:以后出题,答案一定不能是0,例如求n!最低位非零数这样的习题就很不错了. 现在林记提出了一个更难一点的问题:求n!在K进制下的最低位非零数.其中K符合一些特殊的条件:K是由若干个互不相同的质数相乘得出来的,例如K=2,3,5,6,7,10…… 输入格式: 首先输入的第一行是一个整数Q,表示询问的个数. 接下来是Q个…
「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m]\) 有 \(x_{i, j} \in[0, m]\) : 对于 \(\forall i \in [1, n], j \in [1, m)\) 有 \(x_{i, j} < x_{i, j + 1}\) : 对于 \(\forall i \in (1, n], j \in [1, m)\) 有 \…
「SCOI2016」妖怪 题意 有 \(n\) 只妖怪,每只妖怪有攻击力 \(\text{atk}\) 和防御力 \(\text{dnf}\) ,在环境 \((a, b)\) 下,它可以把攻击力和防御力以 \(a : b\) 的代价呼唤,它的最强战斗力为互换后的攻击力与防御力的最大值. 现要给他们一种环境,使得它们的最强战斗力最小.答案保留四位小数. \(1 \le n \le 10^6, 0 < \text{atk}, \text{dnf} \le 10^6\) 题解 首先,一个很显然的性质,…
题目链接:https://www.luogu.org/problemnew/show/P1955 并查集操作,1e9要离散化,数组要开大一些,操作前先执行合并操作 样例好毒啊(全是排好序的) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 100010; int fa[maxn…
题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询点的树的直径 操作2:对于两条直径连接起来最短,肯定是连两个中点(显而易见 thi.小trick:重复利用vis数组-变成int,这样对于每棵树实际每个根不一样标号时的vis值也不同 #include <queue> #include <cstdio> #include <cst…
题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 交易: 先在某点买入,再从该点后所在路径上卖出. 买入卖出是两个操作,考虑可以分开在两张图上做,于是就有了分层图,共三张图. 我们把原图中的路径都设边权为0,表示在这条路上走对交易利润无影响,在第一张图上买入后,我们就走到下一张图,准备卖出操作. 设u->v 所以若从u点买入,到下一条边的v,即v…
题目链接:https://www.luogu.org/problemnew/show/P3393 被占领的点可以先连在一个点上然后只需要对这一个点bfs一遍就可以求所有的危险点 #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 2 * 1e5 + 10; ll n, m, k, s, val[2], danger[maxn], ddis[maxn], dis[maxn], ch…
题目链接:https://www.luogu.org/problemnew/show/P4017 DAG + DP #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 500010; const int mod = 80112002;…
题目链接:https://www.luogu.org/problemnew/show/P1351 做了些提高组的题,不得不说虽然NOIP考察的知识点虽然基本上都学过,但是做起题来还是需要动脑子的. 题目质量很高吧,觉得出的很有水平 (除了2017 d1t1 70分: 三层枚举强制到距离为2 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using n…
题目链接:https://www.luogu.org/problemnew/show/P3623 说是对克鲁斯卡尔的透彻性理解 正解: 先考虑加入水泥路,然后再考虑加入剩下必须要加入的最少鹅卵石路. 之后对原图再跑最小生成树 先跑鹅卵石路到k条. 再从所有水泥路中直到成为最小生成树. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using name…
题目 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积(n<=1e15). 分析 好吧,一看数据范围及可知暴力不可做我是不会说我打了一次暴力得了50分的,看一下让求的,恶心,仔细观察后觉得是一道数位DP,可先将n换做二进制,在每一位每一位的分析,若为0则跳过,若为1则处理一番,在处理时可先脚动模拟一番,发现和杨辉三角略有联系,故先处理处杨辉三角,最终出答案(代码里都有体现),时间是:luogu…
题目链接:https://www.luogu.org/problemnew/show/P1231 对于每本书只能用一次,所以拆点再建边 #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 50000 + 10; const int in…
题目链接:https://www.luogu.org/problemnew/show/P1268 给定所有点间的最短路求原图所有路径和 形如: 我们需要计算红边+绿边 绿边 = (红边+蓝边+紫边)/2 所求等于 (红边+蓝边+紫边)/2 + 红边 枚举 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; cons…
题目链接:https://www.luogu.org/problemnew/show/P3178 模板题 菜 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define lson left, mid, rt<<1 #define rson mid + 1, right, rt<<1|1 #define ll long lon…
题目链接:https://www.luogu.org/problemnew/show/P2194 第一问:缩点并且统计其强连通分量里的最小耗费.把所有强连通分量的最小耗费加起来. 第二问:统计在每个强连通分量里与最小耗费相同的点数.乘法原理统计所有强连通分量答案. #include <stack> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm&g…
题目链接:https://www.luogu.org/problemnew/show/P3627 把点权转化到边权上去. #include <stack> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 500000 +…
题目链接:https://www.luogu.org/problemnew/show/P4231 诶 我很迷啊..这跟树状数组有什么关系啊...拿二阶差分数组过了..? #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long #define ri register using namespace std; const…
题目链接:https://www.luogu.org/problemnew/show/P1462 记住HP=0也叫死. #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 5000001; const int inf = 0x7f; l…
题目链接:https://www.luogu.org/problemnew/show/P3398 辣鸡树剖1300ms 倍增大法吼啊 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 550000; const int maxlog = 20; int n, m, root, f…
题目链接:https://www.luogu.org/problemnew/show/P3884 对方不想和你说话并向你扔了一个lca模板. #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int maxlog = 10; const int maxn = 105; int n, m, s, wid…
题目链接:https://www.luogu.org/problemnew/show/P3879 我先说一句: 我永远都喜欢StellaSTL 这个题,很明显就是 trie树 hash map+vector 思路: 直接用map<string,vecotr > 代替这题里的trie树,注意开map的时候后面两个> >之间要有一个空格. 用vector记录每个单词出现的句子位置,每遇到一个就把该单词所出现的句子的编号压入对应的vector里. 于是乎= =这就是最暴力的想法. 接下来…
题目链接:https://www.luogu.org/problemnew/show/P1186 邻接表开大开小真的奇妙,毒瘤玩意,再您妈的见. #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1010; const int inf…
题目链接:https://www.luogu.org/problemnew/show/P1640 数据有点水吧,从属性值连向对应武器编号. 枚举属性值匹配,遇到第一个无法匹配的直接跳出就好惹~. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; inline int read() { int ret=0; cha…
题目链接:https://www.luogu.org/problemnew/show/P2234 本来是一道打算练习splay的题目 发现暴力可以过啊.. #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #define inf 0x7fffffff #define ri register using namespace std; int n,answer;…
对于区间查询的问题,提供一种思路: 莫队. 莫队是处理区间问题的乱搞神器,尤其是对于离线查询问题,当然也可以做在线查询,比如带修莫队. 对于有的题,莫队是乱搞骗分,而在某些地方,莫队是正解. 这道题来说,可以当做是萌新初学莫队的一个板子,而且莫队也好理 解.线段树树状数组这类也可以做,但是相比莫队而言麻烦些.(个 人见解,不喜勿喷.谢谢) 1st.关于莫队的思想: 先明白一点,莫队可以理解成: 优雅的暴力. 暴力算法几乎人人都会,所以莫队理解起来好理解. 如果让你暴力的话呢? 我们用一个cnt[…
题目链接:https://www.luogu.org/problemnew/show/P2324 不懂怎么剪枝,所以说,,我需要氧气.. 第一道A* // luogu-judger-enable-o2 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #define maxn 10 using namespace std; , mx, sx, sy; ]…