hiho一下 第109周:Tower Defense Game
来源:互联网 发布:宝鸡金台区政府大数据 编辑:程序博客网 时间:2024/05/06 05:38
题目链接
参考了下别人的思路(推荐一篇博客讲解的很清楚为什么那样排序:点击打开链接),所以是按q从大到小排序的顺序来决定先经过哪个节点,还有就是给出的两点之间有边的应该2个点都保存相应的连接点。
用dfs的思想,每次先更新完子节点再更新当前节点。我又传进了当前节点的父节点,因为连接关系中没保存父子关系,所以要把邻接点中自己的父节点排除掉,只更新子节点。
之前错在了更新一个点的p,q值上,正确思路是确定顺序后,保存当前需要的最大钱数和剩余钱数,初始化为当前父节点的p,q,然后每次经过一个节点就判断当前的钱是否足够付当前点的支出,如果不够就要补上,这时p值就要增加相应的钱说明带的钱不够。q也就变为当前点的挣的钱。如果够付支出,就更新q值为付完后剩下的钱加上挣的钱。
#include <iostream>#include<vector>#include<algorithm>using namespace std; vector<int> link[10010],v1;struct node{ int p,q;}nodes[10010];//保存n个点的支出和收入bool cmp(int n1,int n2){ return nodes[n1].q>nodes[n2].q;//按q从大到小排}void dfs(int root,int fa){ int p1=nodes[root].p;//p1记录需要付出的最大价钱 int q1=nodes[root].q;//q1记录剩余的钱 vector<int >v1=link[root]; for(int i=0;i<v1.size() ;i++){ if(v1[i]!=fa){ dfs(v1[i],root);//初始化子节点,除了父节点 } } sort(v1.begin(),v1.end(),cmp);//对子节点按q从大到小排序 for(int i=0;i<v1.size() ;i++){ if(v1[i]!=fa){ if(q1<nodes[v1[i]].p){ p1+=nodes[v1[i]].p-q1;//若剩余的钱不够就要不足缺少的部分 q1=nodes[v1[i]].q;//剩余的前就变为当前节点的q } else{ q1=q1-nodes[v1[i]].p+nodes[v1[i]].q;//若若剩余的钱够就更新剩余的钱为减去支出的加上挣来的。 } } } nodes[root].p=p1; nodes[root].q=q1;}int main(){ int n,a,b; cin>>n; for(int i=1;i<=n;i++) cin>>nodes[i].p>>nodes[i].q; for(int i=1;i<n;i++){ cin>>a>>b; // if(a<b) link[a].push_back(b);//保存有连接的点 // else link[b].push_back(a); } dfs(1,0); cout << nodes[1].p << endl; return 0;}
0 0
- hiho一下 第109周:Tower Defense Game
- hiho一下 第109周 Tower Defense Game 树DP+贪心
- 微软hiho上的笔试题:Tower Defense Game
- A Game hiho一下第173周
- 【hihoCoder】Tower Defense Game
- BZOJ3426: Poi2013 Tower Defense Game
- BZOJ3426 Poi2013 Tower Defense Game
- hiho一下 第143周 hiho密码
- hihocoder Tower Defense Game(树上贪心)
- hiho一下 第141周
- hiho一下 第139周
- hiho一下第143周
- hiho一下 第145周
- hiho一下 第167周
- hiho一下 第175周
- hiho一下 第174周
- hiho一下 第173周 题目1 : A Game 【区间dp】
- hiho一下第56周 高斯消元
- iOS-利用运行时给分类添加属性
- 数字推理技巧
- PHP 生成excel|好用强大的php excel类库
- Vim的分割窗口split命令
- 内存是手游的硬伤——Unity游戏Mono内存管理与泄漏
- hiho一下 第109周:Tower Defense Game
- 欢迎使用CSDN-markdown编辑器
- python生成一个1到n的队列
- 114. Flatten Binary Tree to Linked List
- 快捷键总结(持续更新)
- JAVA 并发编程-线程创建(二)
- MediaPlayer getCurrentPosition 等于0问题
- HDU 5794 A Simple Chess 16多校6 dp 容斥 lucas
- 公共代码开发员-软件作坊里的高人