hiho一下第109周《Tower Defense Game》
题目链接:传送门
题目大意:给你一棵树,根节点为1,树上每一个节点都有一个花费值和收入值(花费值>=收入值),要访问一个节点需先支付花费值,访问该节点结束后得到收入值
同时访问树时要求是有序的,即访问一个节点后,需要访问完它所有的子节点,才能访问它的兄弟节点。问我们最少需要带多少钱就能访问完所有的节点。
题目思路:感觉是一道比较有趣的题,首先我们可以由题意知,访问完整个树付出的代价是一定的(总花费-总收入),设代价为 X,访问完后我们会得到总收入 Y,
由题意可知访问完后我们手上的钱数 Y>=0,我们带的钱要尽可能少,那么Y就要尽可能小,我们要把每个节点返回的钱尽可能花出去,而不是留在手上。
那么只需要dfs一遍,处理子节点的访问顺序,返回每个节点访问完后得到的最优情况(对每个节点都按带钱最少考虑)。
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- #include <stack>
- #include <cctype>
- #include <queue>
- #include <string>
- #include <vector>
- #include<functional>
- #include <set>
- #include <map>
- #include <climits>
- #define lson root<<1,l,mid
- #define rson root<<1|1,mid+1,r
- #define fi first
- #define se second
- #define ping(x,y) ((x-y)*(x-y))
- #define mst(x,y) memset(x,y,sizeof(x))
- #define mcp(x,y) memcpy(x,y,sizeof(y))
- using namespace std;
- #define gamma 0.5772156649015328606065120
- #define MOD 1000000007
- #define inf 0x3f3f3f3f
- #define N 100005
- #define maxn 10005
- typedef pair<int,int> PII;
- typedef long long LL;
- int n,m;
- int a[],b[];
- vector<int>V[];
- struct Node{
- int x,v; ///x花费值,v收入值
- bool operator<(const Node&a)const{
- return v>a.v;
- }
- };
- Node dfs1(int x,int fa){
- Node t1;
- vector<Node>v;
- for(int u:V[x]){
- if(u==fa)continue;
- t1=dfs1(u,x);
- v.push_back(t1);
- }
- sort(v.begin(),v.end()); ///按收入从大到小排序
- int temp1=a[x],temp2=b[x]; ///temp1花费,temp2收入,要访问当前节点需要花费a[x],访问当前节点后收入b[x]
- for(Node u:v){
- temp2-=u.x;
- if(temp2<){ ///如果当前收入不够支付下一个节点的花费,则需要多带钱
- temp1-=temp2;
- temp2=;
- }
- temp2+=u.v;
- }
- t1.x=temp1;t1.v=temp2;
- return t1;
- }
- int main() {
- int i,j,group,x,y,Case=;
- while(scanf("%d",&n)!=EOF){
- for(i=;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
- for(i=;i<n;++i){
- scanf("%d%d",&x,&y);
- V[x].push_back(y);
- V[y].push_back(x);
- }
- Node node=dfs1(,-);
- printf("%d\n",node.x);
- }
- return ;
- }
hiho一下第109周《Tower Defense Game》的更多相关文章
- hdu 4779 Tower Defense (思维+组合数学)
Tower Defense Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) ...
- HDU 4779:Tower Defense
Tower Defense Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)T ...
- dp --- hdu 4939 : Stupid Tower Defense
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- hdu4939 Stupid Tower Defense (DP)
2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131 ...
- 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point
// 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...
- Stupid Tower Defense
Problem Description FSF is addicted to a stupid tower defense game. The goal of tower defense games ...
- 初识Tower Defense Toolkit
Tower Defense Toolkit 做塔防游戏的插件 主要层次如下图: 1GameControl _ _Game Control(Script) _ _ _Spawn Manager _ _ ...
- HDU4939Stupid Tower Defense (有思想的dp)
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- Tower Defense Game
Tower Defense Game 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is a tower defense game with n level ...
随机推荐
- PHP-PHP5.3及以上版本中检查json格式的方法
function is_json($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); } j ...
- jBoss修改端口号
http://blog.csdn.net/ghost_t/article/details/5708991 jBoss版本: jboss-5.1.0.GA jboss-6.0.0.Final j ...
- php json_decode失败,返回null
在使用json_decode之前,一定得保证字符串是utf-8编码,而执行json_decode失败的原因有很多,罗列如下: 1)编码不对: 2)字符串格式不对: 3)字符串格式对,但是有异常字符: ...
- 关于ie,火狐,谷歌浏览器滚动条的隐藏以及自定义样式
最近做了一个项目,要求各个浏览器统一滚动条的样式,不显示滚动条,但是不影响鼠标的滑动事件. 查了很多资料,ie和谷歌都是可以自定义滚动条样式的,但是ie只能改变颜色,并不能修改宽度,圆角之类的.谷歌就 ...
- JS JSOP跨域请求实例详解
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...
- poj_2773
题目的愿意非常easy.给你一个n,求在升序排列的情况下,第k个与之相互素的数. 解法:首先我们要知道gcd(b×t+a,b)=gcd(a.b),那么接下来就非常easy了.全部与之互素的数都是以ph ...
- HTTP Cache怎样计算Age
这里的Age指的是响应头Age.以下内容有部分翻译,也有部分自己的理解.欢迎讨论. 我们用now表示当前主机的当前时间,用request_time表示缓存发起请求的时间,用response_time表 ...
- SQL变量与全局变量
变量 1.局部变量的声明(一个@) declare @n int --声明变量关键字为declare 然后@加变量名 后面是变量类型 declare @s varchar(36) 2.局部变量的赋 ...
- 点滴积累【JS】---JQuery实现条形统计图,适用于选择题等统计
效果: 思路:前台JS实现动态数据效果,后台可以拼接字符串或者用JSON加载数据 代码: <%@ Page Language="C#" AutoEventWireup=&qu ...
- 让 Vivado有Zybo Board的配置文件
Zybo Board开发记录: 让 Vivado有Zybo Board的配置文件 由 judyzhong 于 星期三, 07/13/2016 - 10:41 发表 本文转载自:coldnew's bl ...