PAT Advanced 1090 Highest Price in Supply Chain (25) [树的遍历]
题目
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)–everyone involved in moving a product from supplier to customer. Starting from one root supplier, everyone on the chain buys products from one’s supplier in a price P and sell or distribute them in a price that is r% higher than P. It is assumed that each member in the supply chain has exactly one supplier except the root supplier, and there is no supply cycle. Now given a supply chain, you are supposed to tell the highest price we can expect from some retailers.
Input Specification:
Each input file contains one test case. For each case, The first line contains three positive numbers: N(<=10^5), the total number of the members in the supply chain (and hence they are numbered from 0 to N-1); P, the price given by the root supplier; and r, the percentage rate of price increment for each distributor or retailer. Then the next line contains N numbers, each number Si is the index of the supplier for the i-th member. Sroot for the root supplier is defined to be -1. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the highest price we can expect from some retailers, accurate up to 2 decimal places, and the number of retailers that sell at the highest price. There must be one space between the two numbers. It is guaranteed that the price will not exceed 1010.
Sample Input:
9 1.80 1.00
1 5 4 4 -1 4 5 3 6
Sample Output:
1.85 2
题目分析
已知所有非叶子节点的所有子节点,求最大层数和最大层叶子结点数
解题思路
思路 01
- dfs遍历树,参数p记录当前节点所在层的价格,max_p记录最大层,max_p_num记录最大层叶子结点数
思路 02
- bfs遍历树,double ps[n]数组记录当前节点所在层的价格,max_p记录最大层,max_p_num记录最大层叶子结点数
Code
Code 01(dfs)
#include <iostream>
#include <vector>
using namespace std;
const int maxn=100000;
double p,r,max_p;
vector<int> nds[maxn];
int max_p_num;
void dfs(int index, double p) {
if(nds[index].size()==0) {
if(max_p<p) {
max_p=p;
max_p_num=1;
} else if(max_p==p) {
max_p_num++;
}
return;
}
for(int i=0; i<nds[index].size(); i++) {
dfs(nds[index][i],p*(1+r*0.01));
}
}
int main(int argc, char * argv[]) {
int n,rid,root;
scanf("%d %lf %lf", &n,&p,&r);
for(int i=0; i<n; i++) {
scanf("%d",&rid);
if(rid==-1)root=i;
else nds[rid].push_back(i);
}
dfs(root,p);
printf("%.2f %d",max_p,max_p_num);
return 0;
}
Code 02(bfs)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn=100000;
double p,r,max_p,ps[maxn];
vector<int> nds[maxn];
int max_p_num,root;
void bfs() {
queue<int> q;
q.push(root);
while(!q.empty()) {
int now = q.front();
q.pop();
if(nds[now].size()==0) {
if(max_p==ps[now]) {
max_p_num++;
} else if(max_p<ps[now]) {
max_p=ps[now];
max_p_num=1;
}
} else {
for(int i=0; i<nds[now].size(); i++) {
ps[nds[now][i]]=ps[now]*(1+r*0.01);
q.push(nds[now][i]);
}
}
}
}
int main(int argc,char * argv[]) {
int n,rid;
scanf("%d %lf %lf", &n,&p,&r);
for(int i=0; i<n; i++) {
scanf("%d",&rid);
if(rid==-1)root=i;
else nds[rid].push_back(i);
}
ps[root]=p;
bfs();
printf("%.2f %d",max_p,max_p_num);
return 0;
}
PAT Advanced 1090 Highest Price in Supply Chain (25) [树的遍历]的更多相关文章
- [建树(非二叉树)] 1090. Highest Price in Supply Chain (25)
1090. Highest Price in Supply Chain (25) A supply chain is a network of retailers(零售商), distributors ...
- 1090. Highest Price in Supply Chain (25) -计层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...
- PAT 甲级 1090 Highest Price in Supply Chain
https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944 A supply chain is a ne ...
- 1090. Highest Price in Supply Chain (25)
时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A supply chain is a network of r ...
- 1090 Highest Price in Supply Chain (25)(25 分)
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- PAT Advanced 1106 Lowest Price in Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- PAT (Advanced Level) 1090. Highest Price in Supply Chain (25)
简单dfs. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- 【PAT甲级】1090 Highest Price in Supply Chain (25 分)
题意: 输入一个正整数N(<=1e5),和两个小数r和f,表示树的结点总数和商品的原价以及每向下一层价格升高的幅度.下一行输入N个结点的父结点,-1表示为根节点.输出最深的叶子结点处购买商品的价 ...
- 1090. Highest Price in Supply Chain (25)-dfs求层数
给出一棵树,在树根出货物的价格为p,然后每往下一层,价格增加r%,求所有叶子节点中的最高价格,以及该层叶子结点个数. #include <iostream> #include <cs ...
随机推荐
- IP地址 网络地址 子网掩码
提纲 (1)IP地址 (2)网络地址 (3)子网掩码 IP地址=网络地址+主机地址,图1中的IP地址是192.168.100.1,这个地址中包含了很多含义.如下所示:网络地址(相当于街道地址) ...
- HDU - 6198 number number number(规律+矩阵快速幂)
题意:已知F0 = 0,F1 = 1,Fn = Fn - 1 + Fn - 2(n >= 2), 且若n=Fa1+Fa2+...+Fak where 0≤a1≤a2≤⋯≤a,n为正数,则n为mj ...
- vCenter组件和服务
1).随VMware Platform Services Controller一起安装的服务 a. vCenter Single Sign-On身份验证服务 b. vSphere 许可证服务 c. V ...
- vuejs+thinkphp5+phpsocketIO+timer数据及时更新
1.安装thinkphp5.0以上版本包含workerman框架2.composer安装composer require workerman/phpsocket.io3.vue中调用需要加载weapp ...
- JAVA中的指针
不同于CPP,JAVA中不需要程序员对指针进行操作.不过,这不代表JAVA没有指针,事实上,JAVA的指针操作都被底层代码封装了.笔者在初学Java时,虽然就了解了形参,实参,StringBuffer ...
- 我学到的treap
到目前为止,平衡树应该是我学过的数据结构里面最难的一个了.(顺便贴上一个我认为treap讲解的比较好的博客https://blog.csdn.net/u014634338/article/detail ...
- css渐变实现
body{ width: 100%; height: 100%; overflow: hidden; } *{ margin: 0px; padding: 0px; font-size: 0px; } ...
- 基于Ambari的WebUI部署HBase服务
基于Ambari的WebUI部署HBase服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari服务 博主推荐阅读: https://www.cnblogs.co ...
- python 对axis的理解
首先请看一下官方帮助的解释: 轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸. 注意看,官方对于0和1的解释是轴,也就是坐标轴.而坐标轴是有 ...
- 8 —— node —— 响应一切 html 需要的静态资源
fs.readFile('.'+urls, function (err, data) { res.end(data) });