随笔分类 -  《洛谷永远滴神》

orz!!
摘要:难顶,这题其实不难,但是细节问题出的有点多。 考虑删的两条边的相对位置,如果他们的LCA不等于他们,那么很显然就是LCA的两个子树里删边。 如果LCA = 其中一条边,那么就有LCA = 2 * average,然后子树内再删一条。这里记录一下子树里 = average / 3的即可。 emmm细节 阅读全文
posted @ 2021-11-29 20:01 levill 阅读(29) 评论(0) 推荐(0)
摘要:$一开始一直在想怎么构造出来的能更优,太傻了。$ $首先数据很小。然后就是有一个很显然的结论。$ $因为是中序遍历,如果以i为根,那么比i小的肯定被分割到它的左子树,比i大的肯定被分割到右子树$ $有了这点我们可以dp去找最优的根,因为这里显然让左右子树的分都尽量大是最优的,所以满足dp性,中间加个 阅读全文
posted @ 2021-11-29 18:47 levill 阅读(57) 评论(0) 推荐(0)
摘要:题目的输出就把我搞炸了。。没仔细看输出就一直写了,结果。。 首先要求的独立集是恰好个,然后环的输出要输出环上的点数。 首先考虑建立图上的dfs树,对于环,很显然我们考虑每条非树边,然后在环的树边一侧的条数就可以用两个点的深度来处理一下。 对于独立集合的情况,可以染色处理,但是因为dfs树叶子节点一定 阅读全文
posted @ 2021-11-22 20:05 levill 阅读(26) 评论(0) 推荐(0)
摘要:非常好的一个题。 首先很显然能构造异或方案组。 但是这里n,m都很大,如果用一般的高斯消元肯定会超时。 这时就可以利用bitset来加速整行的消元操作。 然后就是要考虑怎么取找最少的方案组数量了。 这个我们在消元的时候尽量去找前面的消就可以了。 // Author: levil #include<b 阅读全文
posted @ 2021-11-19 15:17 levill 阅读(32) 评论(0) 推荐(0)
摘要:div2的T3我就爬了orz........ 摸了半天只想出来了一个40分的做法: 第一1的判断:暴力dfs,感觉可以记忆化一下a的前缀再剪一下枝。不过数据大还是会T掉。 对于2的判断,我这个根据入度去贪心维护,感觉上复杂度和正确性都是在线的好像。 // Author: levil #include 阅读全文
posted @ 2021-08-23 08:42 levill 阅读(41) 评论(0) 推荐(0)
摘要:话不多说直接上题。 P3195 [HNOI2008]玩具装箱: // Author: levil #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; const i 阅读全文
posted @ 2021-08-20 17:38 levill 阅读(28) 评论(0) 推荐(0)
摘要:本来都是不搞计算几何的.. 但是由于斜率dp里要用到,所以被迫学一下。 定义:覆盖所有平面内的点的最小的凸多边形。 Graham算法: 以某个点为起点左右转移来维护凸包的边界的思路。 利用极角排序来对过程优化。且维护一个栈。 洛谷P2742 // Author: levil #include<bit 阅读全文
posted @ 2021-08-20 11:15 levill 阅读(51) 评论(0) 推荐(0)
摘要:这里是个DAG,可以利用类似倍增的做法。 但是可以直接支配树做,建立一个虚点向所有的起点,然后支配树就即可。 // Author: levil #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pai 阅读全文
posted @ 2021-08-17 20:41 levill 阅读(48) 评论(0) 推荐(0)
摘要:个人觉得理解起来比较抽象,自己可能也讲不好。 定义: 支配点:对于当前点u,如果删去点v后,点u就无法从起点s到达,那么称v为u的支配点。 支配树:将每个点和它的最近支配点连边,那么最后就会形成一棵树,称为支配树。 这个支配点具有类似传递性的性质,a是b的支配点,c是b的支配点,那么必定存在:a是b 阅读全文
posted @ 2021-08-17 14:03 levill 阅读(203) 评论(0) 推荐(0)
摘要:非常好的一个dp题。 一开始拿到的时候想的是二分去做,但是没写出来。 其实看到这个数据范围,应该想到状压,搜索,dp。 状压 和 搜索都不行,考虑dp。 dp[i][j][k],表示i头牛,领头的还剩j点体力,其余的还剩k点体力。 为什么要这样设置状态?因为这题里面特殊的地方就是领头的和其余的差异。 阅读全文
posted @ 2021-02-10 09:18 levill 阅读(116) 评论(0) 推荐(0)
摘要:2 - sat问题: 就是一些元素,他们的值只能为布尔值0,1. 给出一些限制关系,并且每对关系都是两个数之间的。 让你找出一组构造,让所有关系都满足。 解法: 首先要建图: 我们规定,a为1的点为a + n,a为0的点为a。 那么对于给定的一对关系a , b。 如果是a == 1,b == 1,那 阅读全文
posted @ 2021-02-04 15:18 levill 阅读(87) 评论(0) 推荐(0)
摘要:这题数据量很小,显然是状压和dfs。 dfs + 剪枝也可以过这题,但是剪枝比较玄学。。 状压dp: f[i]表示选了的点状态为i时的最小总代价。 dep[i][j]表示选点状态为i的最优状态时的,j的深度。 因为这题多余的边不用连,显然最终的答案是一棵树。 每次选定两条边加入即可。注意的是i 向 阅读全文
posted @ 2021-01-27 09:15 levill 阅读(93) 评论(0) 推荐(0)
摘要:这题之前没做出来,现在看懂了。 因为k很小,所以考虑求出所有恰好满足 dis <= len <= dis + k的路径数。 这里就是用了枚举的思想,去枚举每种情况。 然后dp[i][j]表示从1走到i点用了比最短路多j的路径的方案数。 然后去转移。 有两种思路,从n开始倒着搜dp,比较容易理解。 我 阅读全文
posted @ 2021-01-25 17:08 levill 阅读(157) 评论(0) 推荐(0)
摘要:好久没码题了,码力好像有点下降。 这题有结论可知:枚举没条不在最小生成树上的边,将这条边连上成环,那么就可以去掉环上的最长边(除了新加的这条)。 因为这里是严格次小树,那么最长边就不能和这条新边相等,显然这条最长边只能 <= 新边,如果大于的话,那么最小生成树就可以有更小的。 倍增维护最小值和次小值 阅读全文
posted @ 2021-01-14 16:20 levill 阅读(108) 评论(0) 推荐(0)
摘要:非常细细细的一题。 首先,这数据量显然是状压。 dp[i][j][k] 表示 到第i行,第i行状态为j,第i - 1行状态未k的最大方案数。 我们从上向下考虑的话,每个放置的棋子会被上面两行棋子的放置状态所影响。 所以我们每次转移的时候需要枚举上面的两行。 这样的话复杂度就是 n * m * m * 阅读全文
posted @ 2020-12-20 12:57 levill 阅读(108) 评论(0) 推荐(0)
摘要:这题很早之前就做过,当时没理解透,现在理清楚了,感觉很多好东西。 首先,我们需要明确,区间操作加和区间乘,显然要lazytag。 因为是加和乘两种操作,我们去维护两个tag : adtag - 需要下放的加的值 , mutag - 需要下放的乘的值。 对于区间加这种操作,我们直接去像普通的线段树一样 阅读全文
posted @ 2020-11-19 14:42 levill 阅读(118) 评论(0) 推荐(0)
摘要:杜教筛的模板题: 推出式子就可以了。 具体的怎么推放到杜教筛里讲。 这题主要常数卡得厉害,把预处理的范围开大后冲过去了 还有两种情况,n * (n + 1) 可能会爆long long。 然后r = 2147483647时,L + 1就爆int了,所以也要特判。 #include<bits/stdc 阅读全文
posted @ 2020-10-30 20:55 levill 阅读(94) 评论(0) 推荐(0)
摘要:第一次差不多算自己推出来的吧,代码也写出来了。 但是块的右边界写错了,真有我的.jpg。 看了一眼题,我就得出了$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m} i * j / gcd(i,j)$ 然后就开始愉快(bushi)地推式子了。 $ans = \sum_{i 阅读全文
posted @ 2020-10-29 10:31 levill 阅读(88) 评论(0) 推荐(0)
摘要:贪心的问题总是很难证明。 对于单向传递的纸牌问题:维护差值的前缀和。 https://www.luogu.com.cn/problem/P1031 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef p 阅读全文
posted @ 2020-10-27 13:46 levill 阅读(131) 评论(0) 推荐(0)
摘要:一段时间没做又不太会推了。 首先这题需要一个容斥的做法。 ans = solve(b,d) - solve(a - 1,d) - solve(b,c - 1) + solve(a - 1,c - 1) //这个非常容易推出。 然后就是单个的计算了。 $\sum_{i = 1}^{n} \sum_{j 阅读全文
posted @ 2020-10-27 08:33 levill 阅读(96) 评论(0) 推荐(0)