博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT-ADVANCED-1090-Highest Price in Supply Chain
阅读量:5110 次
发布时间:2019-06-13

本文共 2684 字,大约阅读时间需要 8 分钟。

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 (<=105), 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.001 5 4 4 -1 4 5 3 6

Sample Output:

1.85 2 同1094!树的层序遍历,统计深度最高的层以及该层上的结点数。
#include 
#define MAXN 100000+50using namespace std;int res[MAXN];int sup[MAXN];struct node{ int id, level;};int n;vector
arr[MAXN];double p, r;int root = -1;double power(double a, int t);int main(){ memset(res, 0, sizeof(res)); scanf("%d%lf%lf", &n, &p, &r); for(int i = 0; i < n; ++i){ scanf("%d", &sup[i]); if(sup[i] == -1){ root = i; continue; } arr[sup[i]].push_back(i); } queue
q; q.push({root, 1}); while(!q.empty()){ node top = q.front(); res[top.level]++; q.pop(); for(int i = 0; i < arr[top.id].size(); ++i){ q.push({arr[top.id][i], top.level+1}); } } int maxNum = 0, k = 0; for(int i = MAXN; i >= 0; --i){ if(res[i]){ maxNum = res[i]; k = i; break; } } printf("%.2lf %d\n", p*power(1+r*1.0/100,k-1), maxNum); return 0;}double power(double a, int t){ double ans = 1; for(int i = 0; i < t; ++i){ ans *= a; } return ans;}
CAPOUIS'CODE

 

 

转载于:https://www.cnblogs.com/capouis/p/4791199.html

你可能感兴趣的文章
JSP 手记
查看>>
df和du显示的磁盘空间使用情况不一致的原因及处理
查看>>
[无关] 胡言乱语3
查看>>
Leetcode 29. Divide Two Integers
查看>>
thinkPHP--SQL查询
查看>>
winrar 弹窗处理
查看>>
关于IO流的抽象类
查看>>
2019.1.26
查看>>
伪静态的实现方法:IIS环境下配置
查看>>
Selenium-webdriver系列教程(三)————如何执行一段js脚本
查看>>
使用debussy完成自动仿真
查看>>
MyEclipse中Web项目的发布和运行
查看>>
【模板】最短路
查看>>
理解 Lua 的那些坑爹特性
查看>>
Windows WMIC命令使用详解(附实例)
查看>>
如何从Powerdesigner进行数据建模并生成SQL脚本
查看>>
发现微信支付bug
查看>>
MVC过滤器---异常处理过滤器
查看>>
你不知道的常用 代码分析 规范
查看>>
rlwrap
查看>>