08 2019 档案

摘要:challenge 0: 水题,暴力修改都能过。 #include<bits/stdc++.h> using namespace std; const int maxn=1000010; int n,m,k,p; char flag; int a[maxn]; int main() { scanf( 阅读全文
posted @ 2019-08-29 21:40 JBLee 阅读(232) 评论(0) 推荐(0)
摘要:题目链接 树剖题不用多说,一开始所有黑边的权值是-1,若有修改白边的操作,就把白边的值赋为100000。 之后查询边权之和时,如果和大于1000000,就肯定存在白边,直接输出-1。 //做法:树剖,一开始黑边边权全设为1,若有修改白边,设为100000 #include<bits/stdc++.h 阅读全文
posted @ 2019-08-29 21:29 JBLee 阅读(174) 评论(0) 推荐(0)
摘要:题目链接 其实这道题看着挺麻烦的,但实际上就是网络最大流的模板题,把所有的横向边,纵向边,斜向边建图,跑网络最大流dinic即可。 #include<cstdio> #include<iostream> #include<queue> #include<cstring> using namespac 阅读全文
posted @ 2019-08-29 21:26 JBLee 阅读(153) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-29 18:46 JBLee 阅读(6) 评论(1) 推荐(0)
该文被密码保护。
posted @ 2019-08-28 21:43 JBLee 阅读(6) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-28 00:36 JBLee 阅读(7) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-25 20:35 JBLee 阅读(7) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-24 19:34 JBLee 阅读(12) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-23 19:17 JBLee 阅读(13) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-22 21:08 JBLee 阅读(13) 评论(1) 推荐(0)
摘要:题目链接 读题发现,题目里有三种连边方式: 1.两点之间连一条有向边。 2.一个点与给定区间中的点连一条有向边。 3.给定区间中的点和一个点连一条有向边。 剩下的就是跑最短路。 两点之间连边很好处理,但是如何在区间之间连边?按平时链式前向星加边,最坏可能是n方的复杂度,建个边都要死。 这时就有线段树 阅读全文
posted @ 2019-08-21 15:29 JBLee 阅读(174) 评论(0) 推荐(0)
摘要:题目链接 刘汝佳书上的题目,可以把矩形的每一行都开一棵线段树,最多也就20棵,空间也炸不了。然后就是线段树操作了。 注意:下传的时候最大,最小值也要更新。同样注意标记的优先级顺序。 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 co 阅读全文
posted @ 2019-08-20 22:25 JBLee 阅读(159) 评论(0) 推荐(0)
摘要:题目链接 其实还是比较好做的,树链剖分现在越来越熟练了。对于这道题来说,所有的部落一开始全部在停战状态,所以它们的边权先初始赋为0,对于一个开战操作,就把链接这两个点的边上的边权赋一个大于0的数,查询时若是有和大于0的时候,我们便认为不能走。如果U停战操作,我们在C的时候要注意保存每一次开战的顺序, 阅读全文
posted @ 2019-08-19 10:14 JBLee 阅读(208) 评论(0) 推荐(0)
摘要:题目链接 偶然在讨论里看到这道题,就进来了。 看了一下发现是求区间的平均数及方差,所以肯定是要用线段树来维护的。区间平均数好求,直接求一遍区间和再除以区间长度就是了。 关键是区间方差的问题,做这题的时候还忘了方差是什么东西,真的sb,初中数学白学了。其实这样也比较可以。 手推一下就能够比较容易地发现 阅读全文
posted @ 2019-08-18 22:58 JBLee 阅读(347) 评论(0) 推荐(0)
摘要:题目链接 之前很久的一道题,还是写一写,这道题一眼就是树剖不用说了吧,但是它要同时支持区间赋值和加法操作,所以我们肯定需要两个标记,但是当赋值和加法标记同时下方的时候,就需要我们的细节处理,首先赋值的初始值应该赋为-1,而且下方的时候要先释放优先级高的赋值标记。区间赋值的时候,必须清空之前的加标记! 阅读全文
posted @ 2019-08-18 07:46 JBLee 阅读(166) 评论(0) 推荐(0)
摘要:题目链接 这道题其实还是比较好想的,同样是边权问题。我们需要维护最大值,最小值,和。最坑的地方就是路径上的所有数变相反数,其实这个就是把区间和*-1,区间最大*-1,区间最小*-1,最后pushdown的时候将取反标记^1,接下来一系列都是常规操作。而这里还要记住,单点修改时也要下传lazy标记。而 阅读全文
posted @ 2019-08-18 07:39 JBLee 阅读(154) 评论(0) 推荐(0)
摘要:题目链接 震惊noip被ccf暂停了,不过多半是改个名字什么的。noip的好题还是可以做一做的,这道题的确值得一做,我们看他题上说的是最短的时间是所有经过边权和的最大值决定,也就是说最大值最小,显然的二分答案。由于题目中的关系是一棵树或一条链,所以就可以往这方面想想,可是我就想不到。先打个暴力三十分 阅读全文
posted @ 2019-08-17 11:16 JBLee 阅读(181) 评论(0) 推荐(0)
摘要:题目链接 对于这道题,dp是显然的,不过状态设计就比较奇葩,dp[i][j][h][which]表示在第i行,第j列,差值为h,0表示小a,1表示uim。哪一个人which取到了宝物,不用去记录他们两个人的值,维护差值转移即可。如果超过k+1的话,就直接膜就可以了。 初始状态:dp[i][j][a[ 阅读全文
posted @ 2019-08-16 23:32 JBLee 阅读(150) 评论(0) 推荐(0)
摘要:题目链接 平衡树练手题,我们看它这个数列是动态插入的,所以自然而然就会想到用平衡树来维护。平衡树Splay推荐大家看这篇博客 其实差的最小值只有可能是它与其前驱或后继之差,不然就没有更小的了。因为节点是动态插入的,根据Splay的性质,我们为保证复杂度,就会每次将操作节点旋到根,而他的前驱和后继必然 阅读全文
posted @ 2019-08-13 16:40 JBLee 阅读(176) 评论(0) 推荐(0)
摘要:题目链接 虽然是NOI的题,其实自己想想也就可以做出来。先按题目中的依赖关系建造一颗树,初始的时候所有点权设为0,然后就是快乐的树剖。安装的话就是从节点到根节点的路径的点权值全部赋为1,删除则是把该节点及其子树的权值全部赋为0。统计操作前后两次的区间和,两次差值的绝对值即为答案。这样的好处就是之前已 阅读全文
posted @ 2019-08-13 15:27 JBLee 阅读(156) 评论(0) 推荐(0)
摘要:题目链接 做这道题的时候,乍一看很熟悉,之前考试时也做过类似的题。这道题树剖+线段树是个人都看得出来,不过覆盖标记和加标记同时下放是这道题最坑的地方。当时考试的时候就被这东西搞惨了。 做法:树剖维护边权的时候等效于维护两点之间深度较深的点的点权,这很好理解。 在修改和查询的时候,注意到这张图,我们假 阅读全文
posted @ 2019-08-11 17:30 JBLee 阅读(248) 评论(0) 推荐(0)
摘要:题目链接 在刘汝佳的那本书上看到了这道题,思路:先预处理出起点到所有点以及终点到所有点的最短路径,然后就是枚举所有的商务边,因为只能有一条商务边,所以最优的路径肯定要么就是起点->商务边起点->商务边终点->终点,要么就是直接起点->终点。时间复杂度为预处理的mlogn加上k次枚举。最后还要递归输出 阅读全文
posted @ 2019-08-10 18:43 JBLee 阅读(150) 评论(0) 推荐(0)
摘要:线段树区间异或,四倍经验,666。 关于线段树区间异或: 就是维护区间0的个数,1的个数,取反实际上就是把他们swap一下,总数不变,lazy标记改为^1即可 洛谷有四倍经验 给出题号:P2574,SP7259,P2846,P3870。 P3870代码如下: #include<bits/stdc++ 阅读全文
posted @ 2019-08-08 17:40 JBLee 阅读(225) 评论(0) 推荐(0)