摘要: 我一直以为树上背包的复杂度为$O(nm^2)$ 而其实应该是$O(nm)$ 以为$sz$为$m$的最多$n/m$个,所以计算次数为$n/m*m^2=nm$ 而树上背包不应该这么写 for(int i = head[u]; i; i = nxt[i]) { if(to[i] == fa)continu 阅读全文
posted @ 2021-11-02 17:33 hunxuewangzi 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目思路 主要是不知道怎么加边,而题解巧妙的把加边换成了删点 然后再进行树上背包,细节也有点多 官方题解如下 枚举位于最终边独立集上的加入的边权为 p 的边的数量 t,那么 0 ≤ t ≤ k 且 2t ≤ n,这 是因为每条边将占据图中的两个点。 假设最终要加入 t 条边,那么需要从图中 阅读全文
posted @ 2021-11-02 17:11 hunxuewangzi 阅读(389) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目思路 其实就是发现行和列不影响然后就可以求了 官方题解如下 不难发现行与列是两个独立的问题,因此只需要求出行的最短循环节的长度,再求出列的 最短循环节的长度,相乘就是答案。 以行为例,首先通过 Hash 将问题转化为一维问题。一维问题则是经典问题,对于一个长 度为 n 的字符串,长度为 阅读全文
posted @ 2021-11-02 13:43 hunxuewangzi 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目思路 首先$log(i+j)$只和$i+j$化为二进制的最高位有关 并且$i&j=0$ 所以不会有进位,那么就是和$i,j$中的二进制最高位的最高位有关 然后就是数位$dp$ 设的是$dp[pos][p][lim1][lim2]$ 第$pos$的位置最高位位$p$,以及$i,j$是否有 阅读全文
posted @ 2021-11-02 00:09 hunxuewangzi 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目思路 考虑$a[i]$的贡献 只有比$a[i]$小的数才对$a[i]$有贡献 假设有一个数$a[j]<a[i]&& j<i$ 那么在区间$[l,r] ;l\leq j,i\leq r$的情况下$a[i]$至少要乘以2 $a[j]$在右边同理 每次线段树先搞小的数,再搞大的数,然后再维护 阅读全文
posted @ 2021-11-02 00:00 hunxuewangzi 阅读(35) 评论(0) 推荐(0) 编辑