自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

转载 P1462 通往奥格瑞玛的道路

二分答案,大于二分值的边直接不走,看最后是否存在一条路径即可#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;#define debug(x) c...

2018-11-06 21:23:00 145

转载 Codeforces 721C Journey - DAGDP

设dp[i][j]表示到第i个点一共经过j个点时的最小路径长度,按拓扑序转移就好了考虑到到达第i个点并且目前走过的点数量固定时,显然不需要知道以前走的是哪些点,只要保证此时路径长度最短,就会得到更优的答案注意到k不会超过int,所以数组不需要开longlong(开了会爆内存。。。)判断的时候强转就好了#include <algorithm>#include <i...

2018-11-04 17:05:00 193

转载 洛谷P1095 守望者的逃离 - 决策混乱分开处理

虽然这题显然可以DP。。。但是不能直接当背包来处理,因为没有所谓的上界但是只拿部分分也是可以背包来做的好吧先说正解,首先应该分析题有什么性质再DP,如果说确实找不到性质那就DP吧...但是这题...闪烁,跑步互相独立,假设最优解有闪烁,休息,跑步这几种操作,那么可以先把闪烁和休息提前进行,跑步最后再进行,这样的话可能存在一个时间,使得只闪烁或休息不如来一点跑步了看代码,在决策之前...

2018-11-03 11:08:00 175

转载 P1291 [SHOI2002]百事世界杯之旅 - 期望

设f[i]表示还剩i个没买,那么可以有式子f[i] = (n - i) / n * f[i] + i/n * f[i-1] + 1抽到已经抽到过的,或者是没抽到过的这个状态其实也可以某方面地说成,抽i个的期望花费,但是我这里抽i个不是随便抽i个,而是说如果存在一种方案,这个方案抽取顺序是1 ~ n,那么从第i个抽到第n个的新增加花费是多少最后答案应该是f[n],抽n个的期望花费那...

2018-11-02 21:33:00 149

转载 洛谷P1439 最长公共子序列 - hash - dp - 贪心

因为是两串排列,所以两串值相同位置不同那么公共子序列要求的就是值相同,而“子序列”要求的是值的位置上升那么把ab串联系起来,b和a相同的值,位置不同。设\(fb_i\) 为值为bi的数在a串中的位置,显然已经满足相同那么只要取出一个最长子序列即可,若f值上升,则位置递增,则说明这些bi在a中可以构成一个子序列注意数组下标代表的是长度,存的值是结尾的权值,二分查找到一个下标,直接...

2018-11-02 19:59:00 181

转载 离散化及树状数组求逆序对

用树状数组求逆序对的时候注意:要统计b[i]-1的前缀和,因为可能有相同值的元素不去重离散化:sort(a+1, a+n+1, cmp);for(int i=1; i<=n; i++) { if(i == 1 || a[i].val != a[i-1].val) { tot++; } b[a[i].ord] = tot;}去重离散化...

2018-11-02 18:24:00 124

转载 Noip2013 货车运输 - 生成树 - 倍增

这道题是一类树的瓶颈问题。题意是求两点路径上的最大的最小边(在图中,两点之间路径不只一条),那么肯定这条最小边存在于最大生成树上。(反证法证明)同理,若求最小的最大边,这条最小边一定在最小生成树上因此我们可以将图的问题转化为树上问题。树上两点之间的路径一定经过lca,因此这条路我们可以由lca分成两条链。然后就是更新答案,比较暴力的想法是从两个点分别走到lca,然后更新答案。这样...

2018-11-02 16:36:00 113

转载 P1168 中位数 - 堆

对顶堆,维护第k大考虑维护一个大根堆,一个小根堆。这两个堆总大小为当前区间长度,我们维护两个性质:1.小根堆总比大根堆多一个元素2.小根堆所有元素都大于大根堆元素这样小根堆的堆顶就是区间中位数。当需要加入一个新元素时,如果这个元素比小根堆堆顶要大,就加入小根堆中,反之则加入大根堆,这样可以维护性质2加入元素后,检查两个堆的大小关系,如果大小关系不满足性质1,就在两个堆之...

2018-11-02 14:38:00 217

转载 Poj3250 Usaco2006Nov银组 Bad Hair Day

问题是求一个数往右边看,在遇到大于等于他本身的之前,有多少个比他小的数正难则反,转化问题为一个数能被多少个数看到,算贡献,那么这些的和就是答案用单调栈去处理,把栈里的比当前处理的数要小于等于的全弹掉,剩下的那些就是严格比这个数大的,也就是可以看到这个数的ans要开long long#include <iostream> #include <cstdio&gt...

2018-11-02 14:23:00 104

转载 Noip2016 组合数问题

虽然说通过组合数递推公式可以看出来\(C(i,j)=C(i-1,j-1)+C(i-1,j)\)就是杨辉三角公式,但是还是有一个很关键的差别...就是当j=1时这个公式不太管用...比如说\(C_3^1\) 表示从三个东西里面选一个,有三种选法,这个就需要提前处理了...矩阵前缀和搞一下就好了求组合数的时候注意边界问题,比如负下标,和访问越界什么的,比如我数组开到2005访问最好只到...

2018-11-02 14:22:00 123

转载 Noip2016 愤怒的小鸟 - 状压DP

f(s)表示消灭s集合的小猪所需要的最小数量,考虑到n很小,最大才18,,用二进制来表示状态,0为第i个只小猪没有被消灭,1为第i只小猪被消灭了,就像010001010101这样的,最后求的就是111111111111111这样状态的值P[i]表示所有可能的抛物线需要注意的是,每条抛物线能够干掉的小猪数分为两种情况抛物线干掉了1只小猪抛物线干掉了2只或以上小猪因为题目中...

2018-11-02 14:14:00 134

转载 P1450 [HAOI2008]硬币购物 - 容斥 - DP

直接做多重背包复杂度太高了,我们想想是什么因素限制了如此高的复杂度如果没有硬币个数的限制呢?直接用完全背包预处理后查询就好了那么现在考虑一个较为简单的问题,只有一种硬币有限制设dp[s]为买了价值为s时的方案数,先暂时当做完全背包预处理出dp数组若那个唯一被限制硬币的面值为c,个数为d,那么真正的方案数(其他硬币都是完全背包)是dp[s] - dp[s - c * (d + 1)...

2018-11-02 07:29:00 110

转载 P1288 取数游戏II - 简单博弈

我被博弈的P-position和N-position的定义限制了思想实际上我可以先寻找必胜态,然后用定义来证明这个必胜态这是一个环,题目说至少存在一条边数值为0,先考虑简单问题,整个环只有一个0,那么从起点开始,先手不断取0,“迫使”后手不断往0靠近,可以证明的是先手决定方向,后手不能违背这个方向走因为先手可以把一条边权值置为0,而后手如果跨过这条0边,到达先手之前在的那个点,如果...

2018-11-01 19:14:00 144

转载 BZOJ1878 [SDOI2009]HH的项链 - 莫队

交到洛谷上只有80分。。。注意初始值 l = 1, r = 0然后就是修改的部分(revise)我套用了之前的习惯,直接传值进去,直接f[col]+=k然后判断是否为1或者0,但是我没有想到1可以是0+1得来也可以是2-1得来所以想安全一点就写if和else吧。。。有时候真的难以想到这种可能指针移动的时候注意,每次移动前,l和r所在的点已经被算入答案,如果l现在的点不是所在区...

2018-10-31 19:11:00 109

转载 P2261 [CQOI2007]余数求和 - 数论分块

这道题有着一个转化思想\(k \bmod i \Leftrightarrow k - i * \lfloor\frac{k}{i}\rfloor\)所以有\(ans = \sum_i^n (k - i * \lfloor\frac{k}{i}\rfloor) =n*k - \sum_i^n(i*\lfloor\frac{k}{i}\rfloor)\)注意到\(\lfloor\fra...

2018-10-30 21:22:00 71

转载 简单算法(贪心,模拟,乱搞)小结

P1016 旅行家的预算 - 贪心貌似贪心基本上都得加个排序既然要求花费最少的话,显然在收费低的那个加油站多加点油是最好的那么你考虑这么几种情况1.一种最理想的情况,你在每个加油站加油,都能去到另一个更低价格的加油站,那么你每次找能到达且最小价格的加油站跑过去,然后加一定升数的油,这个一定升数能刚好满足从这个加油站走到下一个“能到达且价格最低的加油站”,所以每到一个加油站,油箱内...

2018-10-30 20:24:00 209

转载 BZOJ2818 gcd - 欧拉函数

这种题应该格外注意“1”的问题(边界处理)题意:给定N,求\(1 \leq x,y \leq N\)且gcd(x, y)为素数的(x,y)数对的个数令p代表一个素数\[gcd(x, y) = p \Rightarrow gcd(\frac{x}{p}, \frac{y}{p}) = 1\]于是有了一个朴素算法,枚举1 ~ N,并筛出小于等于N的素数,枚举到一个数x,再枚举一个素数...

2018-10-30 20:07:00 154

转载 P2158 [SDOI2008]仪仗队 - 欧拉函数

如果你以(1,1)为坐标原点,那么是没有什么规律的但如果你以(0,0)为坐标原点,仔细观察一下能发现每个能看到的点的坐标(x, y)互质然后(x, y)既然可以那么(y, x)也行矩阵坐标从0到N-1注意phi[1] = 1答案是\(1 + 2 * \sum_{i=1}^{N-1} \phi(i)\)#include <algorithm>#include &l...

2018-10-30 18:19:00 109

转载 P1072 Hankson 的趣味题 - 约数

这只是暴力算法给定四个参数a0,a1,b0,b1,求满足\(gcd(x, a0) = a1且lcm(x,b0)=b1\)的x的个数由lcm这个条件可确定x的上界,找b1的约数,每个都判断一下是否符合上述两个条件我我我又爆int了#include <algorithm>#include <iostream>#include <cstring>...

2018-10-29 21:49:00 110

转载 P1463 [POI2002][HAOI2007]反素数

哎暴力算法打错了错误是这样的:for(int i=1; i<=rt_x; i++) { if(x % i == 0) sum++; if(x / i != i) sum++;}但实际上应该这样写:for(int i=1; i<=rt_x; i++) { if(x % i == 0) { sum++; if(x...

2018-10-29 21:12:00 134

转载 POJ2689 Prime distance - 筛法

这是一道非常典型的筛法,利用区间长度比较小,以及质数比较少,用少量的质数,只筛区间内部的合数,复杂度就不会很高建议多开long long,很多时候你难以注意到哪里会爆int还有就是可以自己估摸着数量级提前把素数表打完,别每次都重打一遍素数表#include <algorithm>#include <iostream>#include <cstrin...

2018-10-29 20:52:00 119

转载 POJ3279 Fliptile - 二进制枚举

对于每个点,有效的反转次数不会超过2,所以只要求出每个点的反转次数,加上其本身的0/1,再对2取模,就是这个点现在的颜色问题来了,如何求某个点的反转次数呢?可以逆向思维,先把每个点的反转次数存在数组fli中,某个点的反转次数等于其本身反转次数以及上下左右四个点的反转次数之和(能对这个点有影响的只能是其上下左右的点),再加上其本身的颜色编号(0/1)把全部区域变白?似乎想要消掉一个黑色...

2018-10-28 21:33:00 121

转载 POJ 2762 Going from u to v or from v to u? - 缩点 - DAG最长链

题目大意是,判断一个有向图中所有的任意两点x,y,是否满足,从x可以走到y 或者 从y可以走到x很显然,同一个SCC中的所有点一定满足这个条件,当同一个SCC中的所有点要么同时选要么同时不选的时候,就可以缩点了。缩点的方法就是给每个点加一个强联通分量编号(染色),然后tarjan结束后考察每一条边,若某条边的两头不是同一个颜色,就加一条新边。缩点后的图一定是一个DAG(有向无环图),...

2018-10-28 21:31:00 116

转载 Noip2015 子串 - DP - 考察基本功

先说一个没有滚动数组的版本对于A串的一个字符,只有选和不选两种可能,选是一种方案,不选也是一种方案设\(f(i,j,k)\) 为A串的前 i 项在分离出 第k个子串时成功匹配到B串的前 j 项时 选择 A串第i项的方案数还需要加上A串第i项不选择的方案设\(s(i,j,k)\) 为A串的前 i 项在分离出 第k个子串时成功匹配到B串的前 j 项的方案总数那么\(s(n,m,k)...

2018-10-28 21:29:00 155

转载 01背包 - 记忆化搜索 - 练手

记忆化搜索也是实现dp的一种,有时候可能比状态转移方程推过去复杂,但有时候因为是直接去搜索,反而降低了思维难度就用01背包来练练手(设c为容量,w为重量,v为价值)记忆化搜索是在搜索的基础上,进行优化,跳过打开相同的子树,从而避免大量的重复计算。因为在搜索的时候可能会再次dfs到一个已经到过的点,而这个点又会再打开一棵很大的子树,这样就会进行大量的重复计算,所以如果这个点访问完毕,...

2018-10-28 21:28:00 164

转载 NOIP2014 联合权值 - 图的遍历 - 转化思想

两个问题都需要按照每个节点的相邻点来思考解法。把符合题目要求的,可产生联合权值的有序点对,称为联合点。第一问每个节点的子节点(相邻点)之间,彼此组成联合点,具体看图。可以比较每个节点的相邻点的权值,得到最大子节点和次大子节点。他们的联合权值就是这个节点所能发现的最大联合权值。然后更新答案\[ans=max(ans, max1*max2)\]第二问直接两两相乘的话...

2018-10-28 21:27:00 129

转载 P2672 推销员 - 线段树 - 离线处理

注意这X家不一定连续,并且输入中给定的就是第i家到入口的距离先想只有一个的情况,扫一遍,找到其中最大的那个(路径要乘上2)两个的呢?不大好想,不如想想n个的时候,情况最简单,那么从n到n-1的转移也很简单考虑把过程反过来,一个个删点,每次删使得答案变化最小的点现在问题是 快速找出区间内对答案变化贡献最小的一点及其位置,与区间目前最右端点某些信息比较后就可以得到答案要维护这么多信...

2018-10-28 21:20:00 101

转载 P2216 [HAOI2007]理想的正方形 - 单调队列

这种矩形问题常用单调队列优化枚举(通过贪心取最优降低了一个维度的枚举)推荐这道题也要做一做:[ZJOI2007]棋盘制作单调队列的空间记得开大点! 反正内存够用注意,这题正方形边长是固定的!暴力算法是枚举上边界所在的行,左边界所在的列,通过这两个个信息确定一个正方形,然后预处理出一行中从第i个点到i+n个点的最值,再扫一遍这个正方形的行,复杂度是N^3预处理的时候,复杂度也是N...

2018-10-28 09:48:00 128

转载 KMP模板

网上其他人的博客写的都非常棒,我自己也只是有点明白,就放个模板吧。。。从1开始存的字符串假设要从B串中找好多个A串想理解kmp就得明确数组的定义:nxt[i]表示A串中以i结尾的非前缀子串 与 A的前缀子串 能够匹配的最大长度下面的代码为什么是j+1,不模拟一遍根本无法理解我个人认为,j = nxt[j]是回到了上次匹配位置,你需要看j+1是否和i匹配,才能拓展j,更新nxt[...

2018-10-26 17:11:00 83

转载 P2590 [ZJOI2008]树的统计 - 树剖

我写线段树的时候因为不想用define所以先写好一行int ls = w * 2, rs = w * 2 + 1, mid = (l + r) / 2;然后复制下来,每次用的时候粘贴。。。注意输入的值有负数,求最值的时候注意点。。。#include <algorithm>#include <iostream>#include <cstring&g...

2018-10-22 21:26:00 129

转载 P2602 [ZJOI2010]数字计数 - 数位DP

首先做一下预处理,一般都是DP(递推)处理对于给定数来说,那些位数比他少的数字一定对他的答案有贡献所以无需考虑这些位数少的数是否超越给定数,因而可以直接把全部贡献都算上这个时候预处理就发挥作用了,假设这个数n是4位数吧,那么预处理出0 ~ 999中,每个数码出现的次数考虑DP(递推)处理(大概是套路),设\(f(i,j)表示有i位的数字中数码j出现的次数,\)那么可以得到递推式...

2018-10-22 15:35:00 113

转载 P2149 [SDOI2009]Elaxia的路线 - 最短路 - 图的遍历

注意:矩阵存图,遍历边的时候首先确定边存在,即g[u][v]要有值,无值说明这条边不存在,不应该用来更新最短路他问的是公共路径最长能有多长,就是尽量让两条路的公共路径长度之和最大,别理解错题意,比如说题目背景里面的描述是:一起走的时间尽可能的长。看起来貌似两个人以相反的路径走过相同的一段路不算答案,但是之后替你总结好的题意是这样的:求无向图中,两对点间最短路的最长公共路径这里是无向...

2018-10-20 20:36:00 91

转载 Dijkstra模板

注意几点1.看清楚是有向还是无向图2.dis初始值设为0x3f3f3f3f可能会不够 还是设为0x7fffffff吧,具体来说你要看题目给的范围,若是说边权和<=1e9,那么设成0x3f3f3f3f也行3.中间有一个vis数组,其实不开这个数组,写dis[x] != d也可以,本质上是堆的懒惰删除,当一个点第一次从堆中被取出来,就说明这个点的最短路已经确定好了,此时堆中还有一...

2018-10-18 19:28:00 105

转载 P2596 [ZJOI2006]书架 - 无旋treap

fhq treap多么强劲。。。当用无旋treap解决区间/序列问题时,其实每个点所存的值不再对树的形态产生影响,复杂度由随机优先级和堆结构来保证。这棵树不是以点的值为关键字,只是按照操作把一些点进行了修改,使得任何时候对这棵树进行中序遍历,都能得到最新的书架(序列)状态在节点中,存下书的编号,并且使得每个节点的编号都恰好为他在初始书架中的位置,然后开数组记录书的编号与在初始书架中位...

2018-10-18 14:49:00 136

转载 P1503 鬼子进村 - 平衡树

平衡树维护被毁坏的房子就好了set可以水过。。。注意边界问题#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <set>#include <stac...

2018-10-18 07:28:00 121

转载 P2657 [SCOI2009]windy数 - 数位DP

只需要相邻两个位置差大于等于2即可那么对于一个数,我只需要知道他的最高位,以及这个数有多少位(防止超过边界),就可以表示出这个状态了设f[i][j]表示满足“前i位中最高位的值为j”的windy数有多少个虽然说不能包含前导0,但是j可以为0吧,比如一个数10234,里面有个0首先处理出那些不需要考虑边界,显然比给定数小的windy数,这个很好统计接着考虑到一些靠近给定数x的wi...

2018-10-17 22:00:00 155

转载 P2486 [SDOI2011]染色 - 树剖

先考虑在链上的做法,线段树子节点合并的时候减去重复算的颜色,然后树剖,跨越轻链的时候可以单点查询找颜色(我想的是维护颜色。。。但是明显这个点也是在线段树上的,直接单点查询就好了,想想问题的本质是什么,有没有不那么麻烦的做法)所以要考虑好一些问题的区间可维护性,然后选用适当的数据结构比如区间最大公约数,显然不同的区间可以合并维护,可以用线段树或者st表在logn时间内维护好,但是st表...

2018-10-17 18:59:00 201

转载 [POI2008]BLO-Blockade - 割点

加深了我对割点的理解。。。当割点判定法则成立时,即low[v] >= dfn[u],代表切断u和v这条边后,v会和u分开若一个点u连接的多条边都有这个法则的成立,则说明删除u点后形成了多个区域这多个区域两两都不能访问,而这些区域的大小其实就是搜索树中v的子节点所以要不断更新“目前已经被切割出去的点数”,用这个数和新割出的点数相乘,更新目前不能访问的点对最后用所有被切割出去...

2018-10-17 08:51:00 100

转载 桥与割点 - tarjan

桥判定法则:无向边(x,y)是桥,当且仅当搜索树上 存在 x 的一个子节点y,满足\[dfn[x] <low[y]\]#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <queue>#inclu...

2018-10-17 08:25:00 88

转载 P1890 gcd区间 - st表

st表细节多。。。用线段树维护也行,会慢一点最大公约数这个东西区间上是“可加”的所以可以很方便地合并出区间gcd注意位运算优先级低,多加括号#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <cmath...

2018-10-16 20:47:00 314

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除