摘要: 去年的我还不会打斗地主呵呵 觉得这道题挺难的。。抄了一遍题解,感触挺多的= = 首先出牌的方式太多了不能每次都枚举所有的出牌方式, 于是分成两部分:1、顺子 2、带牌等其他 每次dfs都搜顺子,而且顺子不一定要全出完 所以很机智的是,方式2可以直接模拟计算出来,搜到每个状态都先用方式2计算一下最终的 阅读全文
posted @ 2016-11-17 08:18 mzl0707 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目大意:一棵树,以一定顺序走完n个点,求每个点经过多少遍 可以树链剖分,也可以直接在树上做差分序列的标记 后者打起来更舒适一点。。 具体实现: 先求x,y的lca,且dep[x]<dep[y], 如果在一棵子树下的一条链上,那么lca就是x 则g[fa[x]]--; g[y]++; 如果在一棵子树 阅读全文
posted @ 2016-11-17 08:07 mzl0707 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 枚举每个分段的点,每次O(n)更新左边和右边的hash值 然后用双指针O(n)计算答案 阅读全文
posted @ 2016-11-17 07:59 mzl0707 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1、有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2、有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那堆的右子树中,右子树的深度大于左子树时交换两者以维持左偏性质。 堆中个数太多的时候,pop堆顶的元素 阅读全文
posted @ 2016-11-17 07:55 mzl0707 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 这道题可以O(n)解决,用二分还更慢一点 维护一个单调栈,模拟掉盘子的过程就行了 阅读全文
posted @ 2016-11-15 10:17 mzl0707 阅读(167) 评论(2) 推荐(0) 编辑
摘要: 数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来。。后来改用spfa 然后进行dp,这基本是货郎担问题(TSP),状压中挺常出现的问题 f[s][i]表示状态s下到第i个有宝藏的地方,是否能 阅读全文
posted @ 2016-11-14 20:57 mzl0707 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 这套月赛题不是特别难 T1:离散化+单调队列,队列里出现数的种类不超过K+1,找最大的num[a[i]] T2:一眼可以看出BFS+状压DP,还要SPFA预处理出各个块之间的dis T3:线段树,没什么难度 阅读全文
posted @ 2016-11-13 18:53 mzl0707 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 今早刷了两道树剖的题目,用时两小时十五分钟= = 树剖的题目代码量普遍120+ 其实打熟练之后是很容易调的,不熟练的话代码量大可能会因为某些小细节调很久 3083:裸树剖+“换根” 所谓换根其实只要判断一下当前询问点的子树和当前根的位置关系就好了,不能真的换根 根不在当前点的子树中则不影响;根在当前 阅读全文
posted @ 2016-10-16 11:53 mzl0707 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 之前做过一道基本一样的题目,抽象出来就是有个容量为c的载体,一些线段上某个点到另一个点要运输w个东西,求从头到尾最多能运多少东西。 这种模型可以用贪心做,用map,map[r]表示r的那个点,我们准备运多少头牛到那里,但是还没运到。 用map的好处是不管是插入还是删除,它都按坐标从小到大排。 那么先 阅读全文
posted @ 2016-10-15 08:27 mzl0707 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 一开始被题目读错题= =以为每次只能割一块,那么就是从大到小切 但是其实是可以分为几堆来切的 所以可以逆着来,变为合并n个木板代价最小 易证每次找最小的两堆合并代价最小 用优先队列维护堆。。偷偷懒= = 阅读全文
posted @ 2016-09-21 21:00 mzl0707 阅读(159) 评论(0) 推荐(0) 编辑