传送门 :
思路状态表示: f [ u ] [ k ] f[u][k] f[u][k]表示以 u u u为根的树中保留 k k k个点需要删除的最小边数
状态转移 f [ u ] [ k ] = m i n ( f [ u ] [ k ] , f [ u ] [ j ] + f [ k − j ] − 2 ) f[u][k] = min(f[u][k],f[u][j]+f[k-j]-2) f[u][k]=min(f[u][k],f[u][j]+f[k−j]−2)
显然我们可以将第二位想象成 背包问题来解决
因为我们在 f [ u ] = 1 f[u]=1 f[u]=1的时候已经计算了一次 1 1 1,第二次再计算 f [ x ] f[x] f[x]的时候重复计算了所以需要减去 2 2 2
Mycodeconst int N = 160,INF = 0x3f3f3f3f3f;
int n,p;
vector g[N];
int f[N][N];
int ans;
//f[u][k] 表示以u为根节点 保留k个节点 需要删除最少的边
int deg[N];
void dfs(int u,int fa){
f[u][1] = deg[u];//全切完只保留自己
for(auto x : g[u]){
if(x == fa)continue;
dfs(x,u);
for(int j = p ; j>=1 ;j -- )
for(int k = 1;k>n>>p;
for(int i=1;i>a>>b;
deg[a] ++ ,deg[b] ++ ;
g[a].pb(b);g[b].pb(a);
}
memset(f,0x3f,sizeof f);
dfs(1,0);
for(int i=1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?