摘要:
Range Reachability Query 题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7171 给定一张有向图,每次询问只经过编号在[l,r]范围的边的情况下,点对是否能够到达。 设
f[i][j]表示
i点能否只经过$[l_j,r_j
阅读全文
posted @ 2022-08-10 16:16
comld
阅读(64)
推荐(0)
摘要:
题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7192 LCT维护一下fail树形态,询问时把删除部分和没有被删除的部分交线附近暴力匹配一下。 #include<bits/stdc++.h> #define N 400009 using namesp
阅读全文
posted @ 2022-08-10 15:49
comld
阅读(37)
推荐(0)
摘要:
题目链接:https://acm.hdu.edu.cn/contest/problem?cid=1050&pid=1011 大意就是求一个权值和最大的连通块,其直径不超过k。 似乎是个很常见的经典题,dp状态和深度有关,用长链剖分合并一下。 #include<bits/stdc++.h> #defi
阅读全文
posted @ 2022-08-10 15:45
comld
阅读(43)
推荐(0)
摘要:
题目链接 [P7521 省选联考 2021 B 卷] 取模 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解 想了半天一看竟然是个暴力题。。。 我们可以把所有的情况分为两类:
a_i+a_j< a_k和
a_i+a_j\geq a_k 对于第二种情况,可以证明只能从$(a_
阅读全文
posted @ 2021-10-17 11:20
comld
阅读(199)
推荐(0)
摘要:
还是姿势水平不太行,这道题其实很简单。 很容易发现最后的序列一定是一个上升序列,并且值域是
1-32的,很小。 进一步的,我们可以发现,删数可以随意删,只要我们能尽量合成较大的数就行了。 我们可以令
f[j][i]表示从
j开始,要合成一个
i,最近会跳到什么位置。 这个数组显然是用来倍增的
阅读全文
posted @ 2021-10-17 10:19
comld
阅读(50)
推荐(1)
摘要:
支配树是一种将有向图转化为一棵树的十分有效的方法。 在这棵树中,每个点的父亲就是一个离它最近的点使得去掉这个点之后,一号点和这个点就会不连通。 如果这张图是一个普通的
DAG,那么求解支配树的方法比较简单,直接按照拓扑序去做,对于一个点,它在支配树上的父亲就是所有能够到达它的点在树上的
LCA,
阅读全文
posted @ 2021-08-28 00:58
comld
阅读(89)
推荐(0)
摘要:
费用流可以通过建图求解很多最优化一类的问题,但是它的时间复杂度较低 在费用流的过程中,每次增广出一条边来是的流量+1,可以等价于选择了一种决策。 和普通的贪心不一样的是,费用流每次增广所做出的决策可以是撤销之前做出的某个决策并且加入一个新的决策。 在一些情况下我们可以用其他一些方法去模拟费用流进行的
阅读全文
posted @ 2021-08-25 20:53
comld
阅读(195)
推荐(0)
摘要:
题意:
floyd被写成了这个样子: for i from 1 to n for j from 1 to n for k from 1 to n dis[i][j] <- min(dis[i][j], dis[i][k] + dis[k][j]) 求最后有多少个位置仍然是相等的。 解法1:这个错误
阅读全文
posted @ 2021-08-08 20:46
comld
阅读(125)
推荐(0)
摘要:
给定一棵树,每次可以将一条链到根染成一种新的颜色,对于一条边,它的权值在相邻两个点颜色不同时为1,否则为0。 查询一条路径的边权和,子树里所有点到当前点的距离和,所有路径边权和为0的点对。 链上染色这个操作,很容易就可以想到用
LCT来维护,这个就是
LCT的
access操作,在进行轻重边
阅读全文
posted @ 2021-08-08 20:05
comld
阅读(137)
推荐(0)
摘要:
####题目大意 给一个
n\times n(n\leq 32)的网格,你需要选定
C个格子,要求每行每列至少有一个格子,主对角线和副对角线至少有一个格子,有
k(k\leq 7)个格子不能选,问方案数。 题解 容斥这个不用多说吧。。。 首先对障碍点做容斥,其次对角线这个限制比较麻烦,不好和横
阅读全文
posted @ 2021-08-01 21:28
comld
阅读(248)
推荐(1)
摘要:
####题目大意 给一个排列,问有多少个极大上升子序列,极大是指这个序列不能是其他上升子序列的子序列。 题解 令
f_i表示以
i结尾的子序列个数,那么转移的话枚举前面比它小的位置,转移的话这两个位置之间不能有这两个值之间的数。 考虑分治算这个东西,我们分治$(l,mid)
和(mid+1
阅读全文
posted @ 2021-07-30 19:56
comld
阅读(83)
推荐(0)
摘要:
A 题目大意,给一个操作序列,问能否通过删除一些操作使你从
(0,0)\(走向\)(x,y) 只保留符号相同的操作,模拟一遍看看能不能达到给定的坐标。 #include <bits/stdc++.h> #define N 1000009 using namespace std; typedef l
阅读全文
posted @ 2021-02-06 10:05
comld
阅读(173)
推荐(0)
摘要:
##CF1427E Xum https://www.luogu.com.cn/problem/CF1427E ####题目大意 一开始黑板上有一个正整数,每次你可以选定黑板上已有的两个正整数 ,将两个数的和或两个数的异或写在黑板上,最终目标是将1写在黑板上。 题解 一道非常巧妙的构造题。 考虑我们如
阅读全文
posted @ 2020-11-12 19:57
comld
阅读(218)
推荐(0)
posted @ 2020-10-05 16:54
comld
阅读(154)
推荐(0)
摘要:
前两个个小时过了五题,后三个小时一题没过,三个人盯一份代码盯了2个小时愣是没看出来,心态爆炸。 题意是给你一朵花状无向图,两个人同时走,A走过的边染成蓝色,B走过的边染成红色,走过的边就不能再走,直到其中一个人不能走的时候停下来,问有多少种染色方案。 很显然,我们可以把这朵花拍成数列,那么就是三种情
阅读全文
posted @ 2020-09-27 20:37
comld
阅读(379)
推荐(0)
posted @ 2019-07-14 19:12
comld
阅读(894)
推荐(1)
摘要:
「APIO 2019」奇怪装置 题目描述 有无限个二元组,每个二元组为
((t+\left\lfloor\frac{t}{B} \right\rfloor)\%A,t \% B),给出一些区间,问他们之中有多少本质不同的二元组。 题解 ~~考虑朴素做法,区间求并AC~~ 考虑如果每个二元组为$(t
阅读全文
posted @ 2019-07-08 14:45
comld
阅读(507)
推荐(0)
摘要:
题解 首先可以发现我们对于每种颜色的鱼,长一点的能够覆盖的方案已定完全包含短一点的方案。 所以我们可以只对每种颜色最长的鱼计算贡献。 然后有一个
naive的想法,~~我们从按照最长的鱼的长度小到大枚举每种颜色,然后算出那条最长的鱼能够包含的方案。~~ 这样会算重。 那么我们还有一个
naive 阅读全文
posted @ 2019-07-06 15:43
comld
阅读(490)
推荐(1)
摘要:
给定一个长度为n 的字符串s 和m 个单词,每个单词有权值。 定义一个串的价值为所有单词的价值与其出现次数的积之和。现 在有q 组询问,每次询问s 的一个区间的价值。强制在线,要求 poly(log)。 题解 有一个非常强的AC自动机做法,我不会。 考虑大力维护信息,我们在AC自动机上的每个点维护一
阅读全文
posted @ 2019-07-04 18:01
comld
阅读(349)
推荐(0)
摘要:
题解 思路和
NOIP双栈排序差不多。 对于两个元素,若$l_1 define N 2000009 using namespace std; typedef long long ll; const int mod=1e9+7; const int inf=1e9; int pre[N],nxt[N
阅读全文
posted @ 2019-07-03 11:44
comld
阅读(322)
推荐(0)
摘要:
题解 对于区间取
\max,这个比较好办,直接在线段树上打标记就行了。 如果让我们弹出前
n个数,我们可以用类似超级钢琴的思想,队列中每个元素是一个线段树节点,弹出时记录最值的位置,然后分成两半继续做就行了。 代码 c++ include define N 500009 using namesp
阅读全文
posted @ 2019-07-03 08:39
comld
阅读(417)
推荐(0)
摘要:
题解 题目是让我们求出有多少个边集可以使这张图强连通。 先补集转化一下,求这张图不强连通的方案数。 我们考虑这样的图缩完点之后的情况,既然不强连通,那么它就是个
DAG。 回顾一下有向图
DAG计数的方法。 每次新加入一层入度为
0的点,向之前的点连边。但这时我们不能保证我们枚举的点就是全部入
阅读全文
posted @ 2019-07-02 21:50
comld
阅读(1031)
推荐(3)
摘要:
题解 考虑
p=1的情况。 我们可以把题意理解成平面上有一些线段,你需要给每条线段分配一个长度给定的预备线段,使得预备线段要在它所属的线段前面,并且所有线段不能相交。 因为我们只需要弄出一组解来,所以我们可以直接设
dp[s]表示
s集合内的所有旅行都办好了签证,最后拿到护照的最小时间。 于是
阅读全文
posted @ 2019-07-02 18:55
comld
阅读(284)
推荐(0)
摘要:
http://codeforces.com/problemset/problem/908/G 题解 考虑一个数的答案怎么算。 比如说32214。 我们求出大于等于1的数的个数,为5个,那么加上5 11111。 大于等于2的数有4个,加上4 1111。 大于等于3的有2个,加上3 111。 大于等于4
阅读全文
posted @ 2019-06-27 22:05
comld
阅读(252)
推荐(0)
摘要:
题解 我们可以先写出
dp式来。 设
dp[u][i]表示以
u为根的子树深度不超过
i 1的概率
dp[u][i]=\prod (dp[v][i 1]+1) \frac{1}{2} 然后因为这道题精度要求比较低,所以我们对于每个
u,保留第二维60个就行了。 所以每次加入一个节点的时
阅读全文
posted @ 2019-06-27 20:34
comld
阅读(223)
推荐(0)
摘要:
http://codeforces.com/problemset/problem/183/D 题解 我们可以对于每种
size的
T shirt,设计一个
dp。 令
dp[i][j]表示这种
T shirt准备
i件,转移到了第
j个人,有
i个人喜欢这种
T shirt的概率。
阅读全文
posted @ 2019-06-27 12:01
comld
阅读(263)
推荐(0)
摘要:
https://loj.ac/problem/2736 题解 挺有意思的题。 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块。 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元素插进去。 对于散块我们可以重构,那么对于整块我们也可以快速查询。 现在的问题就是对于一个整块,我们
阅读全文
posted @ 2019-06-26 21:21
comld
阅读(392)
推荐(0)
摘要:
https://loj.ac/problem/517 题解 首先我们如果没有排序这个骚操作的话,可以直接记一下各个数位的前缀和,然后异或标记给全局打,查询的时候先把区间信息提取出来然后整体异或就好了。 对于排序,我们考虑对所有排好序的节点建
trie树,这样即使有全局异或标记,我们也可以在$tri
阅读全文
posted @ 2019-06-26 18:33
comld
阅读(255)
推荐(0)
摘要:
题解 我们可以把一副牌看成一个字符串,字符串的第
i位表示编号为
i的牌有多少张。 注意一下胡牌的条件:1、四面+一对2、七对。 我们可以设计一个
dp。
dp[i][j][k][0/1]表示已经做完了前
i种权值,保留了
(i 1,i)有
j对,除此之外还有
k个
i,除此之外
阅读全文
posted @ 2019-06-19 11:30
comld
阅读(201)
推荐(0)
摘要:
题解 仙题。 参考: 首先我们可以枚举每个点作为最后保留的节点,以它作为根节点进行树形
dp。 注意到我们删去一条边可以看做把边权弄成0,这样根节点可以在边权为0的边上随意走动。 我们设计一个状态:
dp[u][i]表示在以
u为根的子树中,当根节点走到
u时,子树内还剩下
i条边的方案数
阅读全文
posted @ 2019-06-17 09:18
comld
阅读(231)
推荐(0)
摘要:
题解 有意思的题。 首先考虑在
DAG上拓扑的过程,设当前队列中的点集为
S,那么有结论是这些点之间都不能互相到达,这个比较好理解。 那么我们考虑在弹出一个点的时候计算它能够到达多少点,如果当前队列里有超过一个点,那它肯定就不行了。 如果一个点都没有,那么剩下的点他都可以访问。 如果只有一个点,
阅读全文
posted @ 2019-06-16 16:50
comld
阅读(172)
推荐(0)
摘要:
题目大意: 求:
\sum_{i 1}^n\sum_{j=1}^nmax(i,j)\sigma(i j) 题解 对于这个
\max,套路的把它转化成: $$ 2 \sum_{i=1}^n\sum_{j=1}^ii \sigma(i j) \sum_{i=1}^n i \sigma(i
阅读全文
posted @ 2019-06-16 14:47
comld
阅读(132)
推荐(0)
摘要:
题解 ~~warning:式子全都抄的题解。~~ 我们可以先套一层
\min \max反演。
ans=\sum_{i=1}^n ( 1)^{i 1}\binom{n}{i}g_i 那么
g_i就表示喂饱
i只鸽子中至少一只的期望步数。 $$ g_i=\sum_{i\geq 1}i
阅读全文
posted @ 2019-06-16 09:41
comld
阅读(670)
推荐(0)
摘要:
题目大意: 给定
n,
k,
mod,求随机排列在
k层归并排序下逆序对的期望。 题解 考虑这
k层归并会把序列分成若干个块。 这些块内的顺序是原序列的相对顺序,我们要把这些序列归并起来。 考虑一个块内,每对元素都会有
\frac{1}{2}的概率成为一个逆序对. 所以每个块的贡献就是$
阅读全文
posted @ 2019-06-15 17:29
comld
阅读(275)
推荐(0)
摘要:
题解 注意到区间之间没有交叉,所以只有包含的关系,我们可以把它整成一棵树。 然后设一下
dp[i][j]表示以
i为根的子树,最大值不超过区间最大值+
j的概率。 转移: $$ dp[u][j]=p \prod dp[v][mx[u] mx[v] 1+j]+(1 p) \prod dp[v][
阅读全文
posted @ 2019-06-14 20:23
comld
阅读(277)
推荐(0)
摘要:
题解 先钦定
1号站在第一个位置上,那么他第一轮要和
(2)打,第二轮要和
(3,4)打,第三轮和
(5,6,7,8)打。 那么这些区间的最小值不能是给出的数。 考虑容斥。 我们把所有限制位置从大到小排序,设
dp[i][s]表示前
i个数,
S集合中的区间已经被覆盖了的方案数。 那么
阅读全文
posted @ 2019-06-14 09:24
comld
阅读(291)
推荐(0)
摘要:
题解 首先我们观察到在每次取模的过程中一定会有一次的结果是
a_i 1,因为如果不是,我们可以调整,答案肯定是会更优的。 于是我们的有用状态就变成了
O(n)级别。 我们可以对于一个状态,把它表示为
(a,b),表示前
i个数,当前取完模的结果为
a,总和写成
i a+b的形式后最大的$
阅读全文
posted @ 2019-06-14 07:55
comld
阅读(331)
推荐(0)
摘要:
题解 考虑
dp dp[i]=\sum_{i=0}^{i 1}dp[j] (i j)^2 我们可以设
(i j)为
x,那么随着
i向右移动一格,每个
x都是会增长
1的。
dp[i]=\sum_{i=0}^{i 1}dp[j] (x+1)^2 $$ dp[i]=
阅读全文
posted @ 2019-06-13 21:25
comld
阅读(178)
推荐(0)
摘要:
题解 要求最大值,所以考虑
min max \max(S)=\sum_{T|S}\min(T)^{|T|+1} 那么一个集合的
min如何求呢,我们一共有
n (m 1)+m (n 1)个相邻的对,令该集合涉及到的相邻的对的个数为
x,那么期望的时间为$\frac{n (m 1)
阅读全文
posted @ 2019-06-13 10:52
comld
阅读(308)
推荐(0)
摘要:
题解 我们可以把每个格子拆成两个点,一个表示横向的,一个表示纵向的,相邻的格子横向和纵向连边。 如果直接按照题意做的话,我们应当在横向和纵向的点之间连边,有限制的边设下界为1,然后跑可行流。 或者考虑用链覆盖的思想,我们把横向点当成入点,纵向点当成出点,然后相邻的入点连向出点。 入点和出点之间连边表
阅读全文
posted @ 2019-06-13 08:24
comld
阅读(318)
推荐(0)