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 ...
随机推荐
- C# 视频监控系列:学习地址汇总
原文地址:http://www.cnblogs.com/over140/archive/2009/04/07/1429308.html 前言 对于视频监控系统大家应该是不陌生的,实施的路况信息.地铁. ...
- 部署NopCommerce商城系统问题整理
NopCommerce是一个很棒的开源商城系统,下面整理一下我在部署使用NopCommerce系统中的一些问题. 我使用的是NopCommerce3.9版本. 1.安装 安装教程网上很多,这里不细说, ...
- Swashbuckle一个webapi调试利器
开发weibapi通常会使用postman或者其他模拟http请求的工具去模拟请求.但是这些工具需要自己保存请求地址的url以及参数 每次我都是先查询wiki看参数. 看见同事再用Swashbuckl ...
- spine findBone
spBone* bone=skeletonAnimationNode->findBone("boneName"); CCPoint boneWorldPos=ccp(bone ...
- Java并发编程(二):JAVA内存模型与同步规则
一.Java内存模型(JMM) 它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.一个线程如何和何时能看到其他线程共享变量的值,以及在 ...
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...
- Atitit.js获取上传文件全路径
Atitit.js获取上传文件全路径 1. 默认的value只能获取文件名..安全原因.. 1 2. Firefox浏览器的读取 1 3. Html5 的file api 2 4. 解决方法::使用a ...
- Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast) 1. 使用js,html 撰写dsl1 1.1. 架构图1 1.2. html2 1.3. Js2 1.4. C ...
- Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
Atitit.ati dwr的原理and设计 attilax 总结 java php 版本 1. dwr的优点相对于ajax来说..1 2. DWR工作原理1 3. Dwr的架构2 4. 自定义dwr ...
- 221. Add Two Numbers II【medium】
You have two numbers represented by a linked list, where each node contains a single digit. The digi ...