自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

玛珈山大萌新

破山中贼易,破心中贼难。不破不立,破而后立,力而为人。

  • 博客(28)
  • 收藏
  • 关注

原创 2019 ICPC 南昌 Regional K. Tree(树上启发式合并 + 动态开点线段树)

分析:对每一个值建立一棵线段树树,保存[l, r]内的深度出现的次数,然后通过启发式合并统计答案即可代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define clo

2020-10-31 11:40:13 179

原创 [AcWing面向模型编程]179. 八数码

题目:179. 八数码分析:A*板子题代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endsl#define close() ios::sync_with_stdio(0),

2020-10-29 01:11:17 102

原创 [背包dp]P4095 [HEOI2013]Eden 的新背包问题

题目:P4095 [HEOI2013]Eden 的新背包问题分析:这个题是扣除一类物品的多重背包,可以正向、逆向跑两次多重背包(用二进制优化),然后对于扣除的位置pospospos,枚举两侧的体积,求最值。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout &

2020-10-28 15:10:50 112

原创 [背包dp][AHOI2013]找硬币

题目:[AHOI2013]找硬币分析:贪心:由于硬币之间都是倍数关系,所以优先放大硬币。dp[i]表示最大面值为i的答案。枚举方式:先枚举次大硬币值iii,再枚举最大值是次大的jjj倍,然后算一下每个硬币减少量即可。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i)

2020-10-28 11:53:18 153

原创 [背包dp]小明打联盟

题目:小明打联盟分析:这个题是一个完全背包问题,对于大招,我们有三种选择:l,l+i,rl, l + i, rl,l+i,r,最终的方案中l+il + il+i最多出现一次,于是先用前三个物品+l+r前三个物品+l + r前三个物品+l+r这五个物品跑完全背包,然后用l+il + il+i更新一遍dp[v]dp[v]dp[v]代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开

2020-10-27 22:00:44 157

原创 [AcWing面向模型编程]双向广搜

题目1:190. 字串变换分析:题意是将一个字符串通过替代局部转换成另一个字符串,求最少转换次数。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define clo

2020-10-27 18:39:23 98

原创 [树形dp-贪心][HNOI2003]消防局的设立

题目:[HNOI2003]消防局的设立分析:这题是三星题??不就是个简单贪心吗?好吧,贪心、dp两两不分家,看来刷dp还是能练很多方面的能力的。很容易的分析出来,对于整棵树最深的叶子结点u,我们肯定选fa[fa[u]],而不选u。这样对于整棵树,我们可以每次选取深度最深的点u,然后染色他的祖父。可以用优先队列实现。这题竟然是三星???是三星??代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;/

2020-10-26 18:05:23 353 3

原创 [2020 China Collegiate Programming Contest Weihai Site - 重现赛] L Clock Master

分析:这个题是一个分组背包问题。v=a1p1+a2p2+...+anpnv = a1^{p1}+a2^{p2}+...+an^{pn}v=a1p1+a2p2+...+anpn每一个质因数的幂次的集合就是一个分组。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cou

2020-10-26 16:58:46 341 1

原创 [树形dp][HAOI2015]树上染色

题目:[HAOI2015]树上染色分析:dp[i][j]表示第i个点染j个黑色时的对答案的最大贡献。这里我们采用“合并法”求dp,即将两个子问题合并算大问题的答案。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " &l

2020-10-26 08:55:03 137

原创 [树形dp][FJOI2014]树的重心(100行dp,胆小慎入)

题目:[FJOI2014]树的重心分析:这题在牛客网才三星?那五星就是final金牌题了呗?我人没了。放弃分析,日后复习,感觉好题。参考博客代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i &l

2020-10-23 16:57:38 159

原创 [树形dp][CQOI2009]叶子的染色

题目:[CQOI2009]叶子的染色分析:根可以随便选一个非叶子结点。dp[u][k]表示u结点染成k色使得u子树合法的最小染色数。可以想到如果u的孩子v染了k色,那么v的k色完全可以染在u上,不需要染v。可以得到转移方程:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define pri

2020-10-21 20:42:38 160

原创 [2020 China Collegiate Programming Contest Qinhuangdao Site-重现赛]7-11 Kingdom‘s Power

分析:设dp[u]表示假设兵营建在u点,征服u子树的最少时间,先上个图。贪心的策略是:先访问深度较小的u的子树vi,然后考虑次浅的子树vj的时候,兵来源有两个,一个是root,一个是vi最深的孩子,两者取较小的即可。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i)

2020-10-21 20:28:31 344 4

原创 [树形dp]选点

题目:选点分析:看似是树形dp,其实是个LIS考虑到父节点跟左右儿子的大小关系,将三者按根、右儿子、左儿子排成一个数组,然后跑LIS即可,太妙了,我又没想出来。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " <

2020-10-21 14:59:33 101 1

原创 [树形dp + 组合数学]蓝魔法师

题目:蓝魔法师分析:dp[i][j]表示对于i这个子树来说,i所在的连通块大小为j,并且整棵树合法的方案数。接下来就是类似背包的解法了。遍历每个儿子的分支,每个分支要么删除,要么不删除。1.删除:删除此边,那么就意味着当前以u节点连通块大小为k的方案数 都可以 乘 v节点连通块大小所有的方案数:2.不删除不删除就相当于合并那么此时直接跑两个循环即可:for(int i=1;i<=min(sz[u]*1ll,m);i++){ for(int k=1;k<=min(sz[e

2020-10-21 11:39:30 146 1

原创 [树形dp + 换根]Tree

题目:Tree分析:这个题第一步很好想,求出每个子树的答案。难的是如何求u上方的贡献。(引用)代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define clo

2020-10-20 21:24:20 97

原创 [树形dp]旅游

题目:旅游分析:一道2星的题,一开始还想成贪心找叶子,太菜了。dp[i][0/1]表示不选/选当前结点的最大时间还是菜,毕竟树形dp做的太少了代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i &

2020-10-20 19:28:35 103

原创 [树形dp+贪心]黑白树

题目:黑白树分析:叶子结点一定选,从下往上,对于当前u维护一个如果再选一个子节点能够往上最远的距离maxlen,和不选u能够向上到达的最远距离nowlen。当nowlen=0时,就不得不选一个点(这里我们不关心选了哪个点),使得nowlen = maxlen代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 ll

2020-10-20 17:40:15 108

原创 [区间dp][HAOI2008]玩具取名

题目:[HAOI2008]玩具取名分析:简单的区间合并,因为最终结果的长度最多为4,所以dp设为3维,dp[i][j][k]表示[i, j]区间内能否由k这个字母产生。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " &

2020-10-19 21:24:44 156

原创 [区间dp]合并回文子串

题目:合并回文子串分析:dp[i][j][k][p]表示a串的[i, j]和b串的[k, p]能否通过交叉且保持原有顺序不变形成回文串。4维dp, 先枚举长度,再枚举位置,状态合法则贡献答案。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout <&lt

2020-10-19 11:56:27 125

原创 Counting Stars HDU - 6184[三元环计数]

题目:给你一个图,求有多少不同的由两个三元环拼起来的图形。分析:三元环计数题,考虑每个边的贡献,设num = 每个边参与构成的图形数,则贡献为num * (num - 1) / 2,注意用链式前向星来存边的贡献。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) co

2020-10-18 01:00:03 87

原创 洛谷P1989 无向图三元环计数

分析:洛谷题解代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(0), cin.tie(0), c

2020-10-17 22:51:53 166

原创 XOR key 51Nod - 1295 [可持久化trie]

分析:像主席树那样可持久化代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(0), cin.tie

2020-10-13 22:11:44 101

原创 Query on A Tree HDU - 6191

分析:解法1:离线+trie合并(自下而上合并)解法2:可持久化数据结构代码://解法1#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() io

2020-10-13 20:54:56 124

原创 求大组合数模板

ll fac[maxn];ll inv[maxn];ll powmod(ll a, ll n){ ll res = 1; while(n) { if(n & 1) res = res * a % mod; n >>= 1; a = a * a % mod; } return res;}void init(){ fac[0] = 1; for(int i = 1; i &

2020-10-12 21:43:31 60

原创 [AcWing面向模型编程]trie

题目1:AcWing 143. 最大异或对分析:01字典树模板题代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开 long long 见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_

2020-10-12 01:01:15 107

原创 [启发式合并] Codeforces600E Lomsat gelral

题目1:[Codeforces600E]Lomsat gelral分析:强推入门视频个人的理解由于空间有限,处理过的子树的答案不能全都存起来,但是暴力搜索又会tle,所以就有了启发式合并。启发式合并的核心思想就是:通过仅仅保留当前根的重儿子所在的子树的计算结果、重复计算轻儿子,从而大大减少计算量,复杂度n∗lognn * lognn∗logn代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;/

2020-10-10 22:01:45 71

原创 [AcWing面向模型编程]斜率优化dp

题目1:300. 任务安排1分析:直接去想的话,状态转移的时候无法得知上一个状态到底划分了几批,无法计算总的时间。但是如果每次我们计算状态的时候,将当前的一次划分的时间s对后面所有的任务产生的花费计算在内的话,问题就变得很简单了。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//typedef __int128 lll;#define print(i) cout << "debu

2020-10-07 22:35:07 83

原创 [AcWing面向模型编程]单调队列优化dp

题目1:1089. 烽火传递分析:分析简单。主要注意初始化问题:将dp[0]放入一开始的队列中。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(

2020-10-06 19:51:23 119

空空如也

空空如也

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

TA关注的人

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