善良的国王

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
传说中有一个善良的国王Good,他为了不劳民伤财,每当建造一个城镇的时候都只用一条路去连接,这样就可以省很多的人力和物力,也就说如果有n个城镇,那么只需要n-1条路就可以把所有的城镇链接起来了(也就是一颗树了)。但是不幸的事情发生了:有个一强大的帝国想要占领这个国家,但是由于国王Good的兵力不足,只能守护m个城镇,所以经过商量,国王Good只能从他的所有城镇中选择m个相链接的城市,并且把所有可以链接到这m个城镇的道路都毁掉以阻止强大帝国的入侵。由于毁掉道路也需要花费一定的代价,所以为了经可能的保存实力,国王Good想要毁掉最可能少的道路。现在请聪明的你帮助这位善良的国王Good吧。(m个城市可以是任意的,只要能连接在一起就可以。

输入
第一行一个t,代表有t组测试数据;
每组测试数据第一行有两个数,n,m(0<n<500,0=<m<=n)分别代表城镇总的数量和要保留的城镇数量。
接下来的n-1行,每行包括两个数字,x,y(0<x,y<=n)表示x和y连通。
输出
每组输出站一行。输出格式“case #i: ans”,i代表第i组测试数据,ans即为最少要删除的边数。
样例输入
1
10 3
1 5
1 6
1 7
7 8
7 9
7 10
6 3
6 4
3 2
样例输出
case #1: 2
树形动态规划!   同http://poj.org/problem?id=1947
AC码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
#define M 500
#define INF 9999999
vector<int> adj[M];
int f[M][M],vex[M];
int n,p,ans;
int min(int a,int b)
{return a>b?b:a;
}
int DP(int u)
{vex[u]=1;int i,j,k,v,len=adj[u].size();for(i=0;i<len;i++){v=adj[u][i];vex[u]+=DP(v);}f[u][1]=len;for(i=0;i<len;i++){v=adj[u][i];for(k=vex[u];k>=1;k--){for(j=1;(j<k)&&(j<=vex[v]);j++)f[u][k]=min(f[u][k],f[u][k-j]+f[v][j]-1);}}if(vex[u]>=p)ans=min(ans,f[u][p]+(u!=1));return vex[u];
}
int main()
{int T,i,a,b,count=1;scanf("%d",&T);while(T--){for(i=0;i<M;i++)adj[i].clear();scanf("%d%d",&n,&p);for(i=0;i<n-1;i++){scanf("%d%d",&a,&b);adj[a].push_back(b);}ans=INF;memset(f,INF,sizeof(f));DP(1);printf("case #%d: %d\n",count++,ans);}return 0;
}
重建道路
时间限制: 1000MS   内存限制: 30000K
总提交: 8780   接受日期: 3954
描述
奶牛已在可怕的地震去年五月后重建农夫约翰的农场,与它的N谷仓(1 <= N <= 150,数字1 .. N)。牛没有时间来重建任何额外的道路,所以现在正是从任何给定的谷仓去任何其他谷仓的一种方式。因此,养殖场运输系统可以表示为一棵树。 农夫约翰想要知道另一地震可能造成的伤害。他想知道道路的最小数量,其破坏将隔离正好P(1 <= P <= N)从谷仓的其余部分谷仓的一个子树。
输入
*第1行:两个整数N和P *第2 .. N:N-1行,每 ​​行有两个整数I和J节点i节点J的父母在道路的树。
产量
单线包含整数,表示需要对P个节点被孤立的子树被破坏道路的最小数目。 
样例输入
11 6
1 2
1 3
1 4
1 5
2 6
2 7
2 8
4 9
4 10
4 11
样例输出
2
AC码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
#define M 500
#define INF 9999999
vector<int> adj[M];
int f[M][M],vex[M];
int n,p,ans;
int min(int a,int b)
{return a>b?b:a;
}
int DP(int u)
{vex[u]=1;int i,j,k,v,len=adj[u].size();for(i=0;i<len;i++){v=adj[u][i];vex[u]+=DP(v);}f[u][1]=len;for(i=0;i<len;i++){v=adj[u][i];for(k=vex[u];k>=1;k--){for(j=1;(j<k)&&(j<=vex[v]);j++)f[u][k]=min(f[u][k],f[u][k-j]+f[v][j]-1);}}if(vex[u]>=p)ans=min(ans,f[u][p]+(u!=1));return vex[u];
}
int main()
{int i,a,b;scanf("%d",&T);for(i=0;i<M;i++)adj[i].clear();scanf("%d%d",&n,&p);for(i=0;i<n-1;i++){scanf("%d%d",&a,&b);adj[a].push_back(b);}ans=INF;memset(f,INF,sizeof(f));DP(1);printf("%d\n",ans);return 0;
}

NYOJ 674 善良的国王(树形背包DP)相关推荐

  1. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  2. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  3. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题目描述 给出一棵n个点的树,每个点有黑白两种颜色.q次询问,每次询问给出x和y,问能否选出一个x个点的联通子图,使得其中黑点数目为y. 输入 第一行一个正整数 T 表示数据组数. 对于每一组数据,第 ...

  4. HDU-4044 树形背包dp好题

    不会做,题解是参考网上的.感觉这道题是到好题,使得我对树形背包dp更了解了. 有几个注意的点,直接给出代码,题解以及注意点都在注释里了. #include<bits/stdc++.h> u ...

  5. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  6. 【POJ - 1947】Rebuilding Roads (树形dp,背包问题,树形背包dp)

    题干: The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1. ...

  7. [CTS2019]氪金手游(容斥+树形背包DP)

    降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的"好"成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是 ...

  8. hdu 1011 Starship Troopers (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接 : hdu-1011 题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节 ...

  9. [bzoj5314][Jsoi2018]潜入行动_树形背包dp

    潜入行动 bzoj-5314 Jsoi-2018 题目大意:题目链接. 注释:略. 想法: 学长给我们除了一套考试题,三个学长一人一道这是T1. 好吧好吧,傻逼背包...... 复杂度$O(nk)$. ...

最新文章

  1. 浅析linux容器--Docker
  2. 【图像处理】透视变换 Perspective Transformation
  3. 【敏捷测试】一个测试人员在参与敏捷测试的经验分享(3)
  4. The Genymotion virtual device could not obtain an IP address
  5. 1.VMwareTools的安装,vmware启动的时候,虚拟机黑屏,解决办法
  6. vant 里面找不到轮播图_5分钟搞定,高逼格动态LOGO图
  7. html 缓存 js文件缓存吗,如何为css / js文件设置缓存
  8. python系统学习:第二周之购物车功能
  9. 深度学习实践指南(四)—— 一个典型的深度学习的实践流程
  10. 数据科学包10-pandas高级内容之时间序列
  11. 学做网站(1):环境搭建
  12. (转)超越文艺复兴,Two Sigma成为全球量化基金新霸主
  13. matlab调用cplex
  14. 暴力搜索---新技能get
  15. HTML和CSS中的图像与背景图像
  16. DDL、DML和DCL的理解(1、总述)
  17. R^n代表什么含义?
  18. [C程序设计]给出一百分制成绩,要求输出成绩等级“优秀”、“良好”、“中等”、“及格”、“不及格”。90分以上为“及格”,80~89分为“良好”......
  19. 简单实现Java定时器
  20. Java:获取系统时间,并自定义时间格式

热门文章

  1. Python全栈 MongoDB 数据库(数据的修改)
  2. gulp常用插件总结
  3. WCF分布式开发必备知识(2):.Net Remoting
  4. 百度:土豪投机移动互联
  5. 让一张图片随着手指的移动而移动
  6. C和C++中的整形数据类型
  7. 苹果笔记本电脑电池保养细则
  8. 刚毕业的参加工作的黄金时期的核心策略:打好基础
  9. filecoin的思考
  10. 快速读书的方法(对于理工科的可能适用)