摘要: 我写线段树的时候因为不想用define所以先写好一行 然后复制下来,每次用的时候粘贴。。。 注意输入的值有负数,求最值的时候注意点。。。 c++ include include include include include using namespace std; define debug(x) 阅读全文
posted @ 2018-10-22 21:26 Zolrk 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 首先做一下预处理,一般都是DP(递推)处理 对于给定数来说,那些位数比他少的数字一定对他的答案有贡献 所以无需考虑这些位数少的数是否超越给定数,因而可以直接把全部贡献都算上 这个时候预处理就发挥作用了,假设这个数n是4位数吧,那么预处理出0 ~ 999中,每个数码出现的次数 考虑DP(递推)处理(大 阅读全文
posted @ 2018-10-22 15:35 Zolrk 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 注意: 矩阵存图,遍历边的时候首先确定边存在,即g[u][v]要有值,无值说明这条边不存在,不应该用来更新最短路 他问的是公共路径最长能有多长,就是尽量让两条路的公共路径长度之和最大,别理解错题意,比如说题目背景里面的描述是:一起走的时间尽可能的长。 看起来貌似两个人以相反的路径走过相同的一段路不算 阅读全文
posted @ 2018-10-20 20:36 Zolrk 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 注意几点 1.看清楚是有向还是无向图 2.dis初始值设为0x3f3f3f3f可能会不够 还是设为0x7fffffff吧,具体来说你要看题目给的范围,若是说边权和 include include include const int MAXN = 100000 + 10; const int MAXM 阅读全文
posted @ 2018-10-18 19:28 Zolrk 阅读(207) 评论(0) 推荐(0) 编辑
摘要: fhq treap多么强劲。。。 当用无旋treap解决区间/序列问题时,其实每个点所存的值不再对树的形态产生影响,复杂度由随机优先级和堆结构来保证。这棵 树不是以点的值为关键字,只是按照操作把一些点进行了修改 ,使得任何时候对这棵树进行中序遍历,都能得到最新的书架(序列)状态 在节点中,存下书的编 阅读全文
posted @ 2018-10-18 14:49 Zolrk 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 平衡树维护被毁坏的房子就好了 set可以水过。。。注意边界问题 c++ include include include include include include include using namespace std; define debug(x) cerr 阅读全文
posted @ 2018-10-18 07:28 Zolrk 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 只需要相邻两个位置差大于等于2即可 那么对于一个数,我只需要知道他的最高位,以及这个数有多少位(防止超过边界),就可以表示出这个状态了 设f[i][j]表示满足“前i位中最高位的值为j”的windy数有多少个 虽然说不能包含前导0,但是j可以为0吧,比如一个数10234,里面有个0 首先处理出那些不 阅读全文
posted @ 2018-10-17 22:00 Zolrk 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 先考虑在链上的做法,线段树子节点合并的时候减去重复算的颜色,然后树剖,跨越轻链的时候可以单点查询找颜色(我想的是维护颜色。。。但是明显这个点也是在线段树上的,直接单点查询就好了, 想想问题的本质是什么 ,有没有不那么麻烦的做法) 所以要考虑好一些问题的区间可维护性,然后选用适当的数据结构 比如区间最 阅读全文
posted @ 2018-10-17 18:59 Zolrk 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 加深了我对割点的理解。。。 当割点判定法则成立时,即low[v] = dfn[u],代表切断u和v这条边后,v会和u分开 若一个点u连接的多条边都有这个法则的成立,则说明删除u点后形成了多个区域 这多个区域两两都不能访问,而这些区域的大小其实就是搜索树中v的子节点 所以要不断更新“目前已经被切割出去 阅读全文
posted @ 2018-10-17 08:51 Zolrk 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 桥判定法则:无向边(x,y)是桥,当且仅当搜索树上 存在 x 的一个子节点y,满足 $$dfn[x] include include include include include using namespace std; define debug(x) cerr include include i 阅读全文
posted @ 2018-10-17 08:25 Zolrk 阅读(159) 评论(0) 推荐(0) 编辑
摘要: st表细节多。。。 用线段树维护也行,会慢一点 最大公约数这个东西区间上是“可加”的 所以可以很方便地合并出区间gcd 注意位运算优先级低,多加括号 c++ include include include include include using namespace std; const int 阅读全文
posted @ 2018-10-16 20:47 Zolrk 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 费了半天时间玩拓扑排序,然而发现有结论可以直接用: 在一个DAG中,若有且仅有一个点的出度为0,则其他所有的点都可以遍历到这个点,否则图中不存在能被所有的点遍历到的点 证明。。。反证法什么的来一下,感性理解就好了 阅读全文
posted @ 2018-10-15 20:46 Zolrk 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 虽然是模板但是却提醒我有向图一定要 试着从每个点出发 ,不仅仅是因为图不一定连通,更有可能是只从1号点出发哪也去不了的情况 c++ include include include include include using namespace std; define debug(x) cerr 阅读全文
posted @ 2018-10-14 14:18 Zolrk 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 注意 求子树时,要用子树dfs序连续这个特性,但是 不能用 如下方法(sub表示x的子树中最大的dfs序): 因为这样会无法处理叶子节点(直接返回了) 最好的办法是用size,直接算出来 细节比较多,都在注释里 需要注意的是dfs预处理时,一些特殊的写法 比如说,dfs1的时候,把一个点的父节点存在 阅读全文
posted @ 2018-10-14 14:18 Zolrk 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 看出不等式之后,通过移项套模型 大概不等式模型是这样的:$x_v include include include include using namespace std; define debug(x) cerr dist[x] + w) { dist[v] = dist[x] + w; cnt[v 阅读全文
posted @ 2018-10-14 14:17 Zolrk 阅读(143) 评论(0) 推荐(0) 编辑