重建道路

题目链接

一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破坏。有些道路一旦被毁坏,就会使一棵含有P(1≤P≤N)个牲口棚的子树和剩余的牲口棚分离,John想知道这些道路的最小数目。

显然是一道树形DP

然后看题解

树上分组背包问题

dp[u][i][j]表示以u为根的子树中,前i个子树中留下j个的最小花费

首先,dp[u][size[u]][1]=son_num[u]

以u为节点的子树留下1个节点的花费为u的子树个数

dp[u][i][j]=min(dp[u][i][j],dp[u][i-1][j-k]+dp[v][size[v]][k]-1);

i这一维可以滚动数组滚掉

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #define N 155
  5. int n,p,dp[N][N],out[N],in[N];
  6. struct NODE{
  7. int to,next;
  8. } e[N];
  9. int Head[N],num;
  10. inline void add(int x,int y){
  11. e[++num].to=y;
  12. e[num].next=Head[x];
  13. Head[x]=num;
  14. }
  15. inline int read(){
  16. int x=; char c=getchar();
  17. while(c<''||c>'') c=getchar();
  18. while(''<=c&&c<='') { x=(x<<)+(x<<)+c-''; c=getchar(); }
  19. return x;
  20. }
  21. inline int min(int a,int b){
  22. return a<b?a:b;
  23. }
  24. int dfs(int u){
  25. dp[u][]=out[u];
  26. int sum=;
  27. for(int i=Head[u];i;i=e[i].next){
  28. int v=e[i].to;
  29. int sz=dfs(v); sum+=sz;
  30. for(int j=sum;j>=;j--)
  31. for(int k=;k<=min(sz,j);k++){
  32. dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]-);
  33. }
  34. }
  35. dp[u][sum]=;
  36. return sum;
  37. }
  38. int main()
  39. {
  40. memset(dp,0x3f,sizeof(dp));
  41. scanf("%d%d",&n,&p);
  42. int x,y;
  43. for(int i=;i<n;i++){
  44. x=read(); y=read();
  45. add(x,y);
  46. out[x]++; in[y]++;
  47. }
  48. int st;
  49. for(int i=;i<=n;i++)
  50. if(!in[i]) {
  51. st=i; break;
  52. }
  53. dfs(st);
  54. int ans=0x7fffffff;
  55. for(int i=;i<=n;i++)
  56. ans=min(ans,dp[i][p]+(i==st?:));
  57. printf("%d\n",ans);
  58. return ;
  59. }

【洛谷P1272】 重建道路的更多相关文章

  1. 洛谷 P1272 重建道路 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

  2. 洛谷 P1272 重建道路(树形DP)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  3. [洛谷P1272] 重建道路

    类型:树形背包 传送门:>Here< 题意:给出一棵树,要求断开$k$条边来分离出一棵有$P$个节点的子树.求最小的$k$ 解题思路 和上一题类型相同,但不那么好做了——分离出的一棵子树肯 ...

  4. 洛谷 P1272 重建道路

    题目链接 题解 树形dp \(f_{i, j}\)表示以\(i\)为根的子树切出联通块大小为\(j\)的最小答案 显然\(f[i][1]\)为与\(i\)连的边数 设\(v\)是\(u\)的儿子 那么 ...

  5. 【洛谷P1272】道路重建

    题目大意:给定一个 N 个节点的树,求至少剪掉多少条边才能使得从树中分离出一个大小为 M 的子树. 题解:考虑树形 dp,定义 \(dp[u][i][t]\) 为以 u 为根节点与前 i 个子节点构成 ...

  6. 洛谷 P1272 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

  7. 洛谷 P5019 铺设道路

    题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度 ...

  8. P1272 重建道路(树形dp)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  9. P1272 重建道路

    题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此,牧场运输系 ...

随机推荐

  1. Unable to connect to data source (DSN: shangjihuiclient; Network Address: ; Port Number: 53397). Cannot connect to TimesTen Server. Verify that the TimesTen Server is running or verify that your TCP PORT is set correctly.

    安装完毕TimesTen后,在客户端连接时一直报错. 解决办法是:重启服务器,在连接没在报这个错误.

  2. Kettle集群部署(1台Windows主机和2台Linux服务器)

    不多说,直接上干货! http://blog.csdn.net/jianglushou9763/article/details/70859616

  3. adb调试安卓

    http://blog.csdn.net/liushida00/article/details/49797239

  4. Hadoop 2.7.2 集群搭建(转载)

    http://blog.csdn.net/u010048823/article/details/51913608

  5. 【Linux】快速清空当前文件

    $ : > filename $ > filename $ echo "" > filename $ echo > filename $ cat /dev/ ...

  6. css三角块

    html: <div class="angle"></div> css: .angle{ width: 0px; height: 0px; border-b ...

  7. phpstorm主题设置

    毫无疑问,phpstorm很好用,但是安装完成后自带的主题,丑的一匹,所以总结下如何更换主题............. 1.主题下载位置 http://www.phpstorm-themes.com ...

  8. centos7 安装jdk、Tomcat

    1.安装jdk 下载jdk: 解压:tar -zxvf filename -C /usr/local/jdk8/ 配置环境变量: vim /etc/profile 添加如下内容:JAVA_HOME根据 ...

  9. union、except和intersect查询

    1. union联合查询  (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...

  10. MVC Request.UrlReferrer为null

    使用情景,登录后返回登录前访问的页面. 这个时候用到了UrlReferrer var returnUrl = HttpContext.Current.Request.UrlReferrer != nu ...