考虑任意一种划给大头的方案,两端的都给了大头(bel=1)的边产生难受值,剩下n-k个果子分给m-1个头,当m-1=1时,两端都给了这个小头也产生难受值;而m-1>1的情况要好看的多,贪心的,因为未划分的果子构成一个森林,重新计算这些果子在所在树中的深度,把果子按深度排序,前m-1个个分别划分,剩下的节点任意分配,只需要保证与父亲不同即可,显然按这种分配方法能做到“零难受”。

换而言之,当m=2时只有两端分配不同才不会有难受值(废话!);否则,只有两端都分配给了1(大头)才会有难受值。然后就能写dp了,设f[x,0/1]表示x子树中,x是否划分给了1的最小难受值之和。

\[f[x,0]=\begin{cases}
+\infty &x\text{是最大值点}\\
\sum_{x\to y} \min(f[y,0]+len_{x\to y},f[y,1]) &m=2\\
\sum_{x\to y} \min(f[y,0],f[y,1]) &m>1
\end{cases}\\
f[x,1]=\sum_{x\to y} \min(f[y,0],f[y,1]+len_{x\to y})
\]

似乎很可信的样子……可行个喘喘,怎么着也得加一位表示子树内已经分配给1的节点总数吧……反正不再列式子了(光速逃

#include <bits/stdc++.h>
using namespace std;
const int N=310; int n,m,k;
int head[N],to[N<<1],len[N<<1],lst[N<<1];
int siz[N],f[N][N][2],tmp[N][2]; void ins(int x,int y,int w) {
static int cnt=0;
to[++cnt]=y,len[cnt]=w,lst[cnt]=head[x],head[x]=cnt;
to[++cnt]=x,len[cnt]=w,lst[cnt]=head[y],head[y]=cnt;
}
void dfs(int x,int pa) {
siz[x]=1;
memset(f[x],0x3f,sizeof f[x]);
f[x][0][0]=f[x][1][1]=0;
for(int i=head[x]; i; i=lst[i]) if(to[i]!=pa) {
int y=to[i];
dfs(y,x); siz[x]+=siz[y];
memcpy(tmp,f[x],sizeof f[x]);
memset(f[x],0x3f,sizeof f[x]);
for(int s=0; s<=k&&s<=siz[x]; ++s)
for(int t=0; t<=s&&t<=siz[y]; ++t) {
f[x][s][0]=min(f[x][s][0],min(f[y][t][0]+(m==2)*len[i],f[y][t][1])+tmp[s-t][0]);
f[x][s][1]=min(f[x][s][1],min(f[y][t][0],f[y][t][1]+len[i])+tmp[s-t][1]);
}
}
} int main() {
scanf("%d%d%d",&n,&m,&k);
for(int x,y,w,i=n; --i; ) {
scanf("%d%d%d",&x,&y,&w);
ins(x,y,w);
}
if(m-1+k>n) {
puts("-1");
return 0;
}
dfs(1,0);
printf("%d\n",f[1][k][1]);
return 0;
}

[NOI2002] 贪吃的九头蛇的更多相关文章

  1. [codevs1746][NOI2002]贪吃的九头龙

    [codevs1746][NOI2002]贪吃的九头龙 试题描述 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时 ...

  2. [NOI2002]贪吃的九头龙(树形dp)

    [NOI2002]贪吃的九头龙 题目背景 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是 说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的 ...

  3. vojis1523 NOI2002 贪吃的九头龙

    描述 传说中的九头龙是一种特别贪吃的动物.虽然名字叫“九头龙”,但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落. 有一天, ...

  4. [NOI2002] 贪吃的九头龙

    题目类型:树形DP 传送门:>Here< 题意:有一只九头龙要吃了一颗树,给出一棵\(N\)个节点的带边权的树.九头龙有\(M\)个头,其中一个是大头,大头要吃恰好\(K\)个节点,其他头 ...

  5. Vijos1523 NOI2002 贪吃的九头龙 树形dp

    思路不算很难,但细节处理很麻烦 前面建图.多叉转二叉,以及确定dp处理序列的过程都是套路,dp的状态转移过程以注释的形式阐述 #include <cstdio> #include < ...

  6. 洛谷 P4362 [NOI2002]贪吃的九头龙

    https://www.luogu.org/problemnew/show/P4362 首先有个很显然的dp:ans[i][j][k]表示i节点用j号头,i节点为根的子树中共有k个点用大头时i节点为根 ...

  7. Vijos1523贪吃的九头龙【树形DP】

    贪吃的九头龙 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头 ...

  8. [转帖]利用hydra(九头蛇)暴力破解内网windows登录密码

    利用hydra(九头蛇)暴力破解内网windows登录密码 https://blog.csdn.net/weixin_37361758/article/details/77939070 尝试了下 能够 ...

  9. hydra(九头蛇)多协议暴力破解工具

    一.简介 hydra(九头蛇)全能暴力破解工具,是一款全能的暴力破解工具,使用方法简单 二.使用 使用hydra -h 查看基本用法 三.命令 hydra [[[-l LOGIN|-L FILE] [ ...

随机推荐

  1. 【Leetcode-easy】Reverse Integer

    思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样:result > (Integer.MAX_VALUE - v) / 10 否则result * 10 + ...

  2. ssh免密登陆服务器

    本文介绍的是以公钥认证的方式实现 ssh 免密码登陆远程服务器. 客户端生成RSA公钥和私钥 在用户更目录有一个 .ssh 的文件夹,如果没有就新建一个.在文件夹中通过命令 ssh-keygen -t ...

  3. ubuntu部分常用操作指令记录

    # 以ROOT权限打开图形文件管理界面: sudo nautilus # 给某个文件添加可执行权限,例如: sudo chmod +x /usr/lib/jdk/bin/java # 修改某个文件或文 ...

  4. TensorFlow Action(开山使用篇)

    1.TensorFlow安装: 使用pip install tensorflow安装CPU版: 或使用pip install tensorflow-gpu==1.2.1指定版本安装GPU版. 2.Te ...

  5. Android Weekly Notes Issue #310 (Google IO特别篇)

    Android Weekly Issue #310 May 20th, 2018 Android Weekly Issue #290 本期既有本次Google IO对于Play Console的更新简 ...

  6. NodeJs如何全局统一处理异常,实现RestFull风格

    当在controller中处理客户端发来的数据时,我们会去校验数据,当数据错误时,我们会给客户端返回一个信息,如: export function add (req, res, next) { con ...

  7. Oracle 数据库SQL

    原作者:http://blog.csdn.net/jihuanliang/article/details/7205968 总体说说可能出现的原因: 情况场景: 表A中有个字段是外键,关联了表B中的某字 ...

  8. css3图书3D动画

    css3图书3D动画,css3,立体特效,旋转效果,3D动画,css3图书3D动画是一款基于css3实现的立体旋转3D图书动画特效. 代码下载页:http://www.huiyi8.com/sc/71 ...

  9. web性能压力测试工具http_load/webbench/ad

    http_load 下载地址:http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz 程序非常小,解压后也不到100K 居家 ...

  10. IoC~MVC3+EF+Autofac实现松耦合的系统架构

    MVC3+EF+Autofac网上这种文章确实没有,呵呵,今天就写一个,代大家分享! 这个系列的文章将带我们进入一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你 ...