摘要: 老早就学过,但发现理解的不是很好 而且发现这个东西细节贼重要 1.缩点 缩点是对于有向图的强联通分量 即在同一个强联通分量中每个点都能到达另一个点 代码: http://www.cnblogs.com/yinwuxiao/p/8444680.html 2.2-sat以及输出方案 对于每个点拆成两个点 阅读全文
posted @ 2018-04-12 15:38 尹吴潇 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 介绍: 理解起来挺简单的一个东西 基于xor产生的东西 线性基实际上是一个集合 这个集合xor能得到的值和原集合相同 构造方法: 我们用f[i]记录最高位1在第i位的数 插入一个新元素时,我们从最高位开始扫描 如果f[i]是空的,那么f[i]=x 否则x^=f[i] 1.求xor最大值 这个只要贪心 阅读全文
posted @ 2018-04-12 15:17 尹吴潇 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题解: 由于之前没有对位运算之间的关系仔细研究过,今天仔细推了一波 首先 我们可以利用not和and推出所有位运算 A or B =not (notA and notB) A xor B= ~((notA and notB)or (A&B)) 而本题中定义的nand 我们会发现 x nand x=~ 阅读全文
posted @ 2018-04-12 15:10 尹吴潇 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题解: 烂大街的树形dp?? f[i][j]表示到i点,在i的子树中经过j个,且要返回i点的最小值 g[i][j]表示到i点,在i的子树中经过j个,且不用返回i点的最小值 然后转移做背包就可以了 (注意每个背包的上界为子树大小,这一步就从n^3 >n^2了) 和前几天看的九省联考d1t3的暴力有那么 阅读全文
posted @ 2018-04-12 00:09 尹吴潇 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题解: 区间dp 令f[i][j]表示搞好i-j的最小值 首先如果不用涂色 那么可以从f[i][k] f[k+1][j]转移 如果要涂色,那么就从f[i][k][a](表示i-k全为a)+f[k+1][j][a]+1来转移 为什么可以这样做呢 因为染色只会对这一段区间内产生影响,然后枚举区间相当于枚 阅读全文
posted @ 2018-04-12 00:06 尹吴潇 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 题解: 水题 首先很显然的是把它扩张成2n*2n的矩阵 然后在其中选取一个边长小于n的矩形 那么显然n^2枚举行然后变成序列问题 单调队列优化 时间复杂度(n^3) 阅读全文
posted @ 2018-04-11 23:37 尹吴潇 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 题解: 水题 化简一波式子会发现就是个二次函数再加上一个常数 而只有常数中的-2sigma(xiyi)是随移动而变化的 所以只要o(1)求出二次函数最大值然后搞出sigma(xiyi)就可以了 这个东西显然只要将一个倒序相乘就可以了 被这个m要乘2坑了一波。。。调了半天才过样例 代码: 阅读全文
posted @ 2018-04-11 21:38 尹吴潇 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 题解: 挺水的吧 会发现当b不等于1的时候,状态只有sigma i x^(1/i) 显然这东西很小。。 然后我们会发现每个点向两个点动 定义必胜点和必败点 当一个点有一条边连向必败点 那么它就是必胜点,否则它就是必败点 然后对于b=1特殊处理一下就好了吧 阅读全文
posted @ 2018-04-11 00:01 尹吴潇 阅读(130) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-04-10 23:18 尹吴潇 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 题解: 线段树维护区间取min求和求max 维护最小值以及个数,次小值 标记清除时,分情况讨论 当lazy>max1 退出 当max1>lazy>max2(注意不要有等号) 更新 否则递归处理 据吉如一的论文上说是nlogn的复杂度(至今不知论文在何处) 卡常?? 不懂常熟技巧 那就开个o2水一下。 阅读全文
posted @ 2018-04-10 23:08 尹吴潇 阅读(331) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-04-09 00:05 尹吴潇 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 题解: lct维护子树信息 推荐https://www.cnblogs.com/GXZlegend/p/7061458.html,非常详细 总的来说就是 维护虚树信息和子树信息 虚树信息只有在access和link时才会改变 下面是对拍程序 my maker dp 阅读全文
posted @ 2018-04-08 22:48 尹吴潇 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题解: 水题吧 首先很显然的是状压或者搜索 考虑一下能不能状压吧 这个东西一定是长成三角形的样子的 所以是可以状压的 相邻两位之间有几个0代表他们差几 这样最多会有2n 然后就可以转移了 由于之前对博弈dp的理解非常傻逼 刚开始正着dp以为可能是一样的然后就挂了 当然是要,倒着dp才对。。 代码: 阅读全文
posted @ 2018-04-07 22:56 尹吴潇 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题解: 水题吧 首先考虑最优解。。 从大到小贪心一下就好了 筛法搞出每个数的因数 nloglogn的 然后考虑随机选 会发现当它选了一个不该选的时候,只有重新选这个才能恢复 所以就可以设状态f[i]表示还有i个该取得位置 f[x]=f[x−1]×xn+f[x+1]×n−xn+1 这个应该可以用高斯消 阅读全文
posted @ 2018-04-07 15:19 尹吴潇 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 题解: 感觉巨坑 特殊性质写在读入格式里。。。 保证ai,bi不同就很好做了 排序是显然的 首先我们可以发现,当其他不变的情况下,越近换越有优势 当a[i]=b[i]时 我们可能将它和旁边换一下 当a[i-2]=b[i-2] a[i-1]=b[i-1] a[i]=b[i]时 我们可能要将三个换一下 阅读全文
posted @ 2018-04-07 14:29 尹吴潇 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题解: 首先当没有特殊边的时候就是所有点的入度之积 当有特殊边的时候,考虑一下容斥 那么就是减去构成环的情况 然后我就智障了。。没有想出来 设f[i]表示当前进行到i点的方案数 f[1]=所有点入度的乘积 转移我们可以通过每次/它的入度来转移 为什么这样不会重复的呢。。 因为一棵树怎么可能有两条路径 阅读全文
posted @ 2018-04-07 13:43 尹吴潇 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 题解: 挺水的一道题 套着期望的外壳。。实际上没什么关系 我们可以注意到,每一个元素被算的次数是1*n,2*n-1,3*n+1..... 所以每个的计算次数就是(m-(j-a))*(j-a+1){a表示开始位置,m表示长度} 然后化简一下发现我们要维护的就是ia[i],i*ia[i] 那这个显然用线 阅读全文
posted @ 2018-04-06 23:21 尹吴潇 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 题解: qwq我考虑把这个转化到树上,然后有点思考无果。。 竟然没发现,这tm 不就是个矩形么 然后问题就变成相邻不能相同 枚举每一个与6互质的数作为左上角搞 状压dp计算就可以了 阅读全文
posted @ 2018-04-06 22:59 尹吴潇 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 链接:http://uoj.ac/contest/40/problem/311 题解: 一道很好的期望题吧 用dp的老思路,枚举最大值将序列分割 想到这个就很简单了 状态f[i][j]表示前i个,最大值为j f[i][j]=sigma(sigmaf[k][j-1]*sigmaf[i-k][j]*j^ 阅读全文
posted @ 2018-04-06 14:42 尹吴潇 阅读(104) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-04-06 10:59 尹吴潇 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 区间第k大 阅读全文
posted @ 2018-04-06 01:00 尹吴潇 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 题解: 只会打暴力 正解: 首先有一个是很容易发现的,我们只需要求每一个元素打出的概率就可以了 关键在于如何求这个东西 然后关键在于这个状态的定义 令f[i][j]表示全部r轮,前i张牌,其中j张在i及其之前已经打出 考虑转移(刷表) 1.下一张牌在i+1处打出去了 那么转移就是f[i+1][j+1 阅读全文
posted @ 2018-04-05 23:04 尹吴潇 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题解: 感觉非常智障。。。 我还仔细看了一下题目这是不是颗树,然后发现给了边数 然后就没往这想了 只能从小到大 显然的dag性质啊。。 然后就很简单了啊。。 考虑二分图里最小路径覆盖 这题里,其实也就是找一些路径,使其覆盖所有点 这题无非就是增加了费用限制 所以就变成跑最小费用最大流就好了 但是注意 阅读全文
posted @ 2018-04-05 15:55 尹吴潇 阅读(85) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-04-05 13:45 尹吴潇 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 题解: 一道不错的dp 方法1: 首先会发现它的要求就是数列是摆动的 然后算法大体上是dp方向 会发现这道题对大小之间的差距并没有高的要求 比如 1,3,5与1,2,3实际是等效的 用一个套路:枚举最大值将序列分割 用f[i][0]表示上升,f[i][1]表示下降 转移的话应该挺显然的,最大值右边显 阅读全文
posted @ 2018-04-04 22:26 尹吴潇 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题解: 做过ac自动机上dp的这题应该就很容易想到了 首先在ac自动机上搞dp 表示当前考虑了i位,在自动机的j位上 然后转移就可以了 考虑限制 显然是一个数位dp 考虑位数小于n显然满足要求 考虑位数等于n 令f[i][j][0/1]表示前i位,自动机j上,与限制是否重合 然后枚举转移就行了 另外 阅读全文
posted @ 2018-04-04 20:33 尹吴潇 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 题解: 一个挺显然的dp 记得蓝书上应该有差不多的吧 首先一个常见的思路就是把后来的消耗现在算起 令dp1[i][j]代表在i处时i-j的消耗最小值 令dp2[i][j]代表在j处时i-j的消耗最小值 然后每次转移时考虑剩余元素带来的代价就可以了 代码: 阅读全文
posted @ 2018-04-04 19:43 尹吴潇 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题解: 挺水的一道题目吧 首先^显然不能直接考虑,那么就按位考虑 然后就是一个裸的高斯消元算期望的题目 eps定1e-7wa了,还得1e-9 代码: 阅读全文
posted @ 2018-04-03 23:00 尹吴潇 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 3687: 简单题 Description 小呆开始研究集合论了,他提出了关于一个数集四个问题:1.子集的异或和的算术和。2.子集的异或和的异或和。3.子集的算术和的算术和。4.子集的算术和的异或和。 目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把这个问题交给你,未来的集 阅读全文
posted @ 2018-04-03 22:44 尹吴潇 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题解: 一道高斯消元的裸题 把问题转化为xor的值 之后用bitset优化高斯消元(一个个xor变成一排一起xor) 这样是n^3/32的 另外每一次找方程时只要在下面找到一个当前系数大于0的方程就说明他是有用的(因为如果和上面是重复的那一定等于0了) 当找不到大于0的说明方程缺失 当出现00000 阅读全文
posted @ 2018-04-03 21:49 尹吴潇 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 老早了解了原理,一直没写过 每次消去一个系数,从系数大的开始消,当出现方程提前为0的情况说明无解或者有无穷多解 高斯约当消元法 常熟略大但省略回带过程 阅读全文
posted @ 2018-04-03 00:30 尹吴潇 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题解: 顺便学了一下笛卡尔树 首先显然这题给出的是一颗treap 那么有一个性质就是在它改变权值的时候,它的中序遍历不会随之改变 那么就变成序列上的问题了 令f[i][j][k]表示i-j这段区间最小值为k(当然首先得离散化) 转移就是枚举mid,然后枚举他们的最小值k1,k2 这样时间是n^3*n 阅读全文
posted @ 2018-04-02 20:31 尹吴潇 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 题解: 思路挺水的一道题 首先肯定将时间离散化排序后考虑 然后预处理出ff[i][j]表示从i-j时刻,被包含了多少值 令f[i][j]表示进行到i时刻,A中的个数是j,B中的个数的最大值 转移也挺显然,就是枚举决策 时间n^3 这样第一问就解决了 考虑第二问 会发现就等价于求min(x+y+ff[ 阅读全文
posted @ 2018-04-02 20:01 尹吴潇 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 题解: 这题不像一般的dp题难在思维。。大概代码细节多一点吧 首先 考虑链,那么就是枚举每个点,o(n) 然后 考虑树 其实问题就是计算每个点出发的期望路径的平均值 考虑树形dp 令f[i]表示i向下走的期望路径,这个显然从根dp一次就可以了 令g[i]表示i向上走的期望路径,此时,记w[i]表示从 阅读全文
posted @ 2018-04-01 16:23 尹吴潇 阅读(129) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-04-01 14:27 尹吴潇 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题解: 首先有一个性质很容易观察出来 当A这堆数与B这堆数互质的时候,满足要求 对于前30 这样就可以状压dp了 感觉后面的部分分并没有什么意义啊?? 接下来是正解 我们考虑每个数最多只有一个大于根号n的因子(挺常用的一个思路) 接下来我们会发现根号n中只有8个质因数 这样对于剩余的因子我们可以依旧 阅读全文
posted @ 2018-04-01 00:00 尹吴潇 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 题解: 一道转移方程挺简单的题但是后面的优化挺难的 首先很显然就是先排序然后每次都是连续一段 这样我们就可以dp了 F[i][j]=maxk<j{F[i−1][k]+S[j]−S[k]j−k+1} 前面有10^9的范围的k 这样dp显然是不行的 我们会发现,当k>n的时候,一定是每次与前一个搞一下 阅读全文
posted @ 2018-03-30 22:18 尹吴潇 阅读(72) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-03-30 22:14 尹吴潇 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题解: 一道不错的状压dp 关键在于如何处理出初始状态 dp[i]=min(dp[j]+dp[i^j]) 初始状态可以枚举子集 然后对他们进行排序,如果相邻的小于c,就说明这个方案可行,步数就是sum-1 为什么这么做是对的,所以 我们可以对于那些需要全部交换的,答案就是sum-1 而对那些有的不需 阅读全文
posted @ 2018-03-30 19:27 尹吴潇 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 题解: 暴力都有95分的题。。 正解感觉还是挺妙的 首先会发现答案等于i向前找2a*i+1向后找2b 那么分开统计 先枚举区间a长度l 然后建立 1,1+l,....这些特殊点 对他们求最长后缀和前缀 我们会发现,当lcp1+lcp2>=l时,我们会发现以这两条线之间的点作中轴线是可以的(所以是连续 阅读全文
posted @ 2018-03-29 23:03 尹吴潇 阅读(103) 评论(0) 推荐(0) 编辑