没啥讲的,纯模板
1 | void gauss() |
莫名奇妙上面一个写挂了。。
1 | void gauss() |
题面:https://www.acwing.com/problem/content/209/
1 | void gauss() |
该模板适用于整数mod7方程组,且使用了row、col两个变量来分辨无解、多解的情况
没啥讲的,纯模板
1 | void gauss() |
莫名奇妙上面一个写挂了。。
1 | void gauss() |
题面:https://www.acwing.com/problem/content/209/
1 | void gauss() |
该模板适用于整数mod7方程组,且使用了row、col两个变量来分辨无解、多解的情况
即状态转移关系以树形结构为基础的dp
例题1:https://www.luogu.com.cn/problem/UVA1292
以最少的点覆盖整颗树,则dp[i][1]表示覆盖以i为根的树,选择了i节点的最少节点数,dp[i][0]则表示没选择i节点的最少节点数
1 | void dfs(int u,int fa) |
例题2:https://www.luogu.com.cn/problem/P2014
可将每棵子树看作一个容量为N的背包问题,即树形背包
1 | void dfs(int u) |
注意通过设0节点将森林变成树,0必选,故背包容量为N+1
时间复杂度为
易知在枚举背包容量时,有许多容量是不需要枚举的
1 | void dfs(int u) |
优化后时间复杂度转为
大致计算如下:考虑以u为根节点的子树,其子节点为v1、v2….
则合并时t=size[v1]*size[v1]+(size[v1]+size[v2])*size[v2]+…
t=size[u]*size[u]
其子节点合并复杂度为size[v]*size[v],远小于t,递归下去,复杂度为
感觉还是不太理解orz
参考: