上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 53 下一页
摘要: 树形dp 就是求每个点到标记的点的最大距离 一个经典模型 有一个巧妙的方法,我们求出以这些关键点的直径,然后每个点到关键点的最大距离就是到直径两端的距离 #include<bits/stdc++.h> using namespace std; const int N = 100010; int n, 阅读全文
posted @ 2017-09-26 16:11 19992147 阅读(297) 评论(1) 推荐(0) 编辑
摘要: 线段树+并查集 这道题跟codeforces #416 div2 E几乎一样 于是我又抄了一遍代码 我们建线段树,维护l->r区间这一块黑色白色连通块的数量,并且维护两端的并查集,每次合并区间就是把并查集合并,计算颜色的变化数量,并查集具体是维护一个fa数组,每次合并的时候把两端的并查集信息放到fa 阅读全文
posted @ 2017-09-26 16:07 19992147 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 贪心 想了一会觉得没什么很好的方法,看了题解 我们枚举每个二进制位,对于l,r如果这位相同就异或到答案里,否则停止,这里肯定是r比l大,也就是r这位是1而l是0,那么我们就让r这位选1,l选0,然后把l从这位-1直到0每位全部赋成1,这样就是答案 为什么是对的呢?考虑如果这位不同,那么之前的位全部都 阅读全文
posted @ 2017-09-26 10:59 19992147 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 数位DP 昨天的B题,excited 又学习了一下数位dp... 数位dp要考虑几个比较重要的东西:1.前导0,2.天际线,3.记忆化的条件,4.细节 经常数位dp会问我们l->r区间中满足某某条件的数的个数,这个条件很明显满足可减性,所以一般转化为1->r的数-1->l-1的数,采用记忆化搜索的方 阅读全文
posted @ 2017-09-25 21:55 19992147 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 最小流 我很清楚知道自己已经忘记最小流怎么写了 是一个最小流,每行向每列连容量为1的边,源和汇分别向行和列连下界为限制,上界正无穷的边,然后就是跑最小流了。 我们先跑一个可行流,那么我们得先改造这个图,引入超级源汇,如果一个点流出去的比流进来的多,那么连向超级汇,否则超级源连过来,跑一遍dinic, 阅读全文
posted @ 2017-09-20 23:18 19992147 阅读(119) 评论(0) 推荐(0) 编辑
摘要: fft+manacher fft都快忘了。。。 其实我们发现,这个问题是可以用fft做的,因为是回文子序列,所以我们直接自己和自己求卷积,然后扫描每个位置,注意是每个位置,因为包括奇数长度和偶数长度,f[i]为第i个位置上的对称字符的数量,那么一共就有(2^f[i])-1个回文子序列,因为是要不连续 阅读全文
posted @ 2017-09-20 23:11 19992147 阅读(144) 评论(0) 推荐(0) 编辑
摘要: manacher 先用manacher求出p数组,f[i]表示以i结尾最靠左的回文中心,那么每次用i-f[i-p[i]]更新答案就可以了,感觉十分巧妙...... #include<bits/stdc++.h> using namespace std; const int N = 200010; i 阅读全文
posted @ 2017-09-19 18:02 19992147 阅读(145) 评论(0) 推荐(0) 编辑
摘要: manacher+set 好像这种求回文串形态的都是用manacher,然后求出中心之间奇怪的关系 我们先跑出来manacher,由于只要偶数回文串,我们就只把#位置记录下来,重新保存,然后我们考虑什么情况下区间[x+1,y]*4可以更新答案,x是整个回文串的中心。那么很明显有x+f[x]/2>=y 阅读全文
posted @ 2017-09-19 16:26 19992147 阅读(166) 评论(0) 推荐(0) 编辑
摘要: dp 设dp[i][j]为当前到了第i个位置,一共出现了j个逆序对,然后考虑转移,因为前面只有i-1个数,所以这位只能产生[0,i-1]对逆序对,那么dp[i][j]=sigma(dp[i-1][k]),k∈[i-j+1,j]。 但是这样直接搞是O(n^3)的,那么我们用前缀和优化一下,就是O(n^ 阅读全文
posted @ 2017-09-19 16:20 19992147 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 费用流+线段树 看见这个题我们马上就能想到费用流,设立源汇,分别向每个点连接容量为1费用为0的边,然后相邻的点之间连边,费用为点权,跑费用流就行了,但是很明显这样会超时,那么我们要优化一下,我们观察费用流的过程,发现对于点与点之间的边,每次取一段区间相当于把正向边改为反向边,费用变负,于是我们可以用 阅读全文
posted @ 2017-09-19 08:21 19992147 阅读(252) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 53 下一页