10 2018 档案
摘要:本题强制在线,bzoj3545不强制在线 转自 "SFN1036的题解" 一开始yy出了一种用可持久化线段树来维护可持久化的root数组,然后其他的就像离线那样,只是每次合并线段树的时候不改变原来两棵树的儿子,而是新建节点。恩理论上好像是可以的,但是懒得写。 这题可以用一种叫Kruskal重构树的东
阅读全文
摘要:转自 "hwzzyr的博客" kruskal重构树 由于重构树中把原树的点权转换成为了新建节点的边权,这一过程是这样实现的。 首先对边排序 然后使用并查集辅助加边,每新建一条边时: 新建节点indexindex(编号从n+1n+1开始) 将原有两节点所在集合改为indexindex 将原有节点与in
阅读全文
摘要:来自 "ljh的结题报告" . 解题报告: 这道题好神啊,合并操作的确很具有代表性。 如果考虑如何求方案数,不妨DP统计,因为直接枚举与转移复杂度太大。我们选择把剩余可涂次数相等的分为一类,考虑因为只要剩余可涂次数相等,那么其实这些颜色并没有什么区别,因为我们涂颜色的时候只需要考虑涂的这种颜色剩余次
阅读全文
摘要:先把存在被包含关系的去掉 考虑到DP方程f[i][j]表示到第i个,且保留第i个,删除j个 f[i][k]=max{f[j][k (i j 1)]+min(a[i].r a[i].l,a[i].r a[j].r)} 把公式中min(a[i].r a[i].l,a[i].r a[j].r)为a[i].
阅读全文
摘要:用左偏树不断向上维护仍在[浴血奋战的]骑士攻击力,不断维护tag维护即可 include include define ml(x) tr[x].ml define ad(x) tr[x].ad define ls(x) tr[x].l define rs(x) tr[x].r define vl(x
阅读全文
摘要:转载自[https://blog.csdn.net/elijahqi/article/details/79874902] 首先贪心的把包含于其他线段的线段删除 然后按照左端点排序 那么显然右端点也是单调递增的 设dp[i][k]表示 前i条线段删除k条 i这条线段必须选的最大覆盖长度是多少 那么dp
阅读全文
摘要:kmp和矩阵乘法的运用,还是挺明显的 include include using namespace std; inline void read(int &x){ char ch=getchar();x=0; for(;!isdigit(ch);ch=getchar()); for(;isdigit
阅读全文

浙公网安备 33010602011771号