摘要: #状压dp 将状态表示为一个或多个n进制数,通过数位的运算判断情况之间是否合法,从而完成状态的转移。 ###矩阵内状压dp一般模板 伪代码 将每一行的状态用一个二进制数表示 a{i}.s存储第i中合法情况的二进制数 f{i}{j}表示第i行状态为第j种状态时的答案(最大值or方案数) for(int 阅读全文
posted @ 2021-09-08 17:52 Mint-hexagram 阅读(30) 评论(0) 推荐(0) 编辑
摘要: ####题面 ###分析: (1)先考虑暴力:直接每次在数组上暴力修改,复杂度O(n^2)级,估计也就30分 (2)这题属于区间修改和区间查询,可以考虑线段树,初始值全赋成1,修改操作就是将{l,r}之间的数-1,每次查询{1,n}的区间和就是剩余的黑色点数。不过线段树复杂度不够优秀,而且常数巨大, 阅读全文
posted @ 2021-09-08 15:23 Mint-hexagram 阅读(98) 评论(0) 推荐(0) 编辑
摘要: libreoj传送门 ###算法分析 仿照kruskal的过程,将生成树中的边按边权升序排序,将边两端点所属的点集合合并,将两个点集合中所有点向另一个点集合中连边,由于要维持最小生成树在完全图中的唯一性,则连边的边权需为e[i].w+1, 则产生的贡献为tot+=(e[i].w+1)*(cnt[e[ 阅读全文
posted @ 2021-09-08 14:06 Mint-hexagram 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 把查询离线会让复杂度变得非常优秀,因为每一条边只被查询一次。 #include<bits/stdc++.h> using namespace std; const int maxn=2e4+50,maxm=1e5+40; int fa[maxn]; long long cnt[maxn]; int 阅读全文
posted @ 2021-09-08 11:50 Mint-hexagram 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 洛谷题面传送门 ###题目分析: 题面给出每一步可以走2^k步,k为任意正整数。这很明显是倍增。 而简单的最短路无法解决这个问题,因此考虑图上倍增dp。 设f[i][j][q](bool)表示是否存在一条从i到j长度为2^q的路径。 g[i][j]存储从i到j的最小步数和 考虑初始化, 对于每一个输 阅读全文
posted @ 2021-09-08 08:14 Mint-hexagram 阅读(44) 评论(0) 推荐(0) 编辑