- 博客(21)
- 收藏
- 关注
原创 关于树上dp的一种思路 洛谷 P3177 [HAOI2015]树上染色
树上最经典的dp题目无疑是树上背包,是基于点的一种状态定义和转移方式,但是这样的思维方式有时候是不可行的,关于边的讨论方式也是一种非常优秀的转移方式,并且此时的状态中存储的往往不是此状态下的价值,而是对整体答案的贡献(应为如果能表示出价值往往可以对点dp来求解),我们通过一道例题来看这个问题。P3177 [HAOI2015]树上染色题目大意:有一棵点数为 N 的树,树边有边权。给你一个在 0~...
2018-10-23 21:52:55
206
原创 关于单调队列的一些运用 洛谷P3594
题目大意:给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。数据范围:n<=2e6;题解:我们考虑对于j作为右端点,那么这个区间的左端点在右端点递增时具有单调递增性,可以用反证法证明。那么对于每一个右端点,我们要求出它的左端点即可,那么问题就转化成了求已知右端点与上次询问的左端...
2018-10-22 21:05:17
396
原创 关于组合数的几种求法
在非模意义下直接用公式阶乘求无疑非常容易炸,那么我们就需要更稳定的求组合数的方法1、用组合数性质C(n,m)=C(n,m-1)+C(n-1,m-1),写递归程序LL C(int m,int n){ if(m==n||!n) return 1; else if(c[m][n]) return c[m][n]; else return c[m][n]=C(m-1,n)+C(m-1,n-1)...
2018-10-22 18:25:33
526
原创 关于基础莫队的运用 洛谷P4137
题目大意:有一个长度为n的数组{a1,a2,…,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。题解:我们可以发现对于一个区间我们很难维护他的所出现过的自然数,这道题目又可以离线,那么我们可爱的莫队算法就可以祭出来了,莫队可以很轻松的解决一段区间里的各个数的个数问题,重点在于高效的维护mex。根据抄写题解 我们可以发现只有两种情况在移动区间指针时候会影响到mex值。1、在删除一个...
2018-10-16 20:31:08
232
原创 关于图的遍历的杂谈
为洛谷训练场疯狂打callNoip中图的遍历是基础内容,总结一下图的遍历的技巧与基础算法:P2661题目大意:已知图大小,且所有点出度为1,求最小环大小;题解:这是所有题里唯一水的一道,想怎么搞怎么搞,dfs,要是不嫌大材小用tarjan都可以写,这里有一种思路比较奇怪的解法:用并查集维护一个联通块,不断更新,如果两点已经在一个联通块里,那么说明成环了,暴力找一下环大小就好了,递归都不用。...
2018-10-16 20:17:10
187
原创 关于逆序对的一种运用(树状数组)
主要题目:bzoj4430 27894430题目大意:给定三个串,长度为n,求三个串中序列前后性质的字符对数。发现直接求不好求,但是我们学过逆序对。已知总的对数是n(n-1),只要求出3个中前后不一样的对数就好。我们可以两两求出逆序对数,再除以2,用总对数减去就是答案了。问题的关键在于对于两两序列求其中逆序的对数。我们整理一个序列ai,令ai为在第一个串中位置为i的数再第二个串中的位置...
2018-10-06 08:38:08
231
原创 bzoj 4152: [AMPPZ2014]The Captain
题目大意:在坐标轴上有n个点,一个点(x1,y1)到另一个点(x2,y2)的距离为min(|x2-x1,|y2-y1|),求解从1点出发到n点的最短路径。n&lt;=21e5;题解:这道题是真的好题虽然我不会做 。首先考虑题意,这里权值是最小值,那么可以经过思考,得到一个性质:对于三个点:A(x1,y1)、B(x2,y2)、C(x3、y3),令B在A、C中间(即B的x或y项在中间),定义d...
2018-09-23 16:03:41
225
原创 bzoj4236 JOIOJI
题目大意:从一个只有J、O、I的子串截取一个最长的子串,要求子传中J、O、I的数量相等;题解:自己并不会做 ,题单里标签是神题,看完题解后我也有同感。定义s0,s1,s2是JOI三个字母个数的前缀和,那么对于i,j+1两个位置之间的子串如果满足要求,那么一定有:s0i-s0j=s1i-s1j=s2i-s2j;等式同时减掉s0i-s0j,那么:s1i-s1j-s0i+s0j=s2i-s2j-...
2018-09-22 09:36:00
153
原创 洛谷 P2515 [HAOI2010]软件安装
题目大意:有一个大为m的背包,有n个物品,物品有权值vi和质量wi,每一个物品会依赖一个物品,即必须有其依赖的物品才能装入,求最大权值。m<500,n<100;题解:一道树上背包模板;通过依赖建图,然后从儿子向父亲转移即可(会有这么简单吗?)题目中没有保证没有环,由于一个点只有一个依赖,那么有环的话一定是一个没有出度入读的强连通分量,我们可以用tarjan计算然后dp;所以建...
2018-09-20 22:28:14
204
原创 noip模拟试题 d1t1
题目大意:给定一个n个节点m条边的有向图,权值为ai,求一条权值最大且路径严格单调上升的路径,起点不限。n,m&lt;=51e5,ai&lt;1e9;题解:第一眼看到题目:图上dp,写到一半发现如果从儿子转移到父亲,因为可能有环的缘故,儿子可能是父亲的父亲,所以转移不一定是最优解,我有考虑tarjan缩点然后在DAG上dp,但是在已缩的点的内部讨论麻烦到做不了,然后我就写了个O(n!)暴力,然...
2018-09-20 16:59:38
241
原创 洛谷 P3959 noip d2t2 宝藏
题目大意:给定一n个节点m条边的图,求权值最小的生成树。权值的算法:以一个点为起点,每加一个点权值增加 起点到这个点的点数*所连边的权值。n<=12,m<=1000;题解:先考虑dfs,对于每个点dfs所有组合,复杂度很明显为O(n(n!)),对于12很明显过不去,但是这个题有70分n<=8,dfs能很轻松水到70分,所以很推荐写;这个题目给的n的范围,就很状压,所以考...
2018-09-18 22:40:46
196
原创 洛谷 P3183
题目大意:给一张图,求由入度为零的点到出度为零的点的路径的条数。 点数<100000边数<200000 题解:学校给的题单上这题的标签是toposort,但是我想不到这个题topo的写法,只能一发记忆化搜过。 直接dfs很明显过不去,由题意可知对于一个在图中间的有多个出度入度的点会被重复搜很多次,所以选择记忆化,记录一个点到出度为零的点的路径个数,从每个入度为零的点dfs一遍就好...
2018-09-15 16:04:27
288
原创 洛谷 P2619/bzoj2654 tree
题目大意:给一个图G,其中有白边有黑边,求有need白边条边的最小生成树。 边小于100000条,点小于50000个,边权绝对值小于100; 题解: 看到题目肯定有贪心的想法,先贪心的取need条白边,在用黑边跑最小生成树。但是只要仔细一想就知道不行,因为白边的选取会影响到黑边的选取,很明显贪心是错误的。 考虑另一种计算方法,不管黑白边直接做最小生成树,有两种结果: 1、有多余need条...
2018-09-14 22:53:10
182
原创 洛谷P4145 上帝造题的七分钟 2
题目大意:对于给定的长度为n的数列ai,有m个以下操作: 1、对于l~r区间的每一个数开根号(向下取整); 2、询问l~r的区间和; n<=100000,m<=100000,ai<10^12; 题解: 显然暴力的复杂度是不行的,考虑线段树,但是线段树记录区间和是明显不支持区间开根号的,修改必须推到每一个叶子节点上,修改复杂度就是O(m*nlogn)的,明显过不了;考虑打...
2018-09-14 20:58:25
275
原创 洛谷 P4306
题目大意: 有两种操作: 1、询问后l个数中的最大值; 2.在队尾插入新数(n+上一次查询的值)%d(题目给你,d) 一道线段树最值裸题,没什么可说的,想练习一下线段树的可以做一做; P.S.洛谷上有一些别的做法,如st表,分块算法,单调栈等等,有兴趣的朋友可以试试(都跑的比线段树快) P.S.快读要读-,tree要制负无穷;#include<bits/stdc++.h>...
2018-09-08 09:41:25
183
原创 poj3040 贪心
题目大义:约翰给奶牛发工资,每天c元,约翰有n种硬币各mi个,求最多能发几天工资; 解法(简略证明): 在c元以上的硬币直接给就是最优解,考虑c元以下; 由题目可知,大硬币的价值是小硬币的倍数,所以易知c元以下不管怎样组合都是等价的,而超出c元的部分越少则浪费越少,即能发的天数最多; 要使超出的越少,则以最小的硬币填补最后显然可得最优解; 由上可知价值较大的硬币可用性较小,优先使用,价值...
2018-08-21 18:15:56
233
原创 bzoj2038/洛谷P1494 莫队算法
学习了一下最基础的莫队,感觉应付noip应该是够了,不准备再学习其他更高级的莫队了,这个算法不难而且很巧妙,可以让我的程序跑(wa)的飞快。 这道题是最基础的莫队了,莫队算法的思想就是利用已经算出的结果优化复杂度,大致程序是: 1、将所给数分块; 2、将询问区间以块为第一关键字,不同块以l为关键字,相同块以r为关键字排序; 3、利用区间之间的重复部分减少时间复杂度; 整个思路清晰有效,其...
2018-08-21 15:52:13
194
原创 poj2229
题目大意:给一个数n,求把它分解为2的幂的和的方法种数; 解法:递推,可以理解为完全背包,用完全背包的方法转移; 有dp[i]+=dp[i-2^j];注意内外循环的顺序,2^j在外,能避免重复情况;#include<cstdio>#include<iostream>#include<cmath>using namespace std;int ...
2018-08-20 16:44:23
246
原创 poj 2186
题目大意: 有一有向图,求其他节点都能到达的节点的数量。 由于强联通分量内的点互相连通,可以顺利地用tarjan缩点,而缩点出来的图的结果就是一棵树,通过求树上出度为零的点,可以得出结果。 有几种情况不存在有题目要求的点: 1、图不连通(显然存在多个出度为零的点) 2、树中有多个出度为零得点(显然这几个点互不连通) 可以通过判断出度为零点的个数(大于1)来得到是否存在这种情况。 最终...
2018-08-16 17:05:51
205
转载 起始:水题*2 poj3673 poj3672
还有80+天就到noip了,其实我现在心里慌的一批,但是仍然懒惰无心学习,最近看到同学有写博客的,我就想能不能把我以前写过的板子算法和典型的例题能整理出来,自己详细说明一下,把我不熟悉,不清楚的地方再加以说明,还有学过的但是忘记的算法进行再次学习,以此进行记录。 poj3673#include<cstdio>#include<iostream>#include...
2018-08-15 17:48:26
161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人