【PAT甲级】1090 Highest Price in Supply Chain (25 分)

题意:

输入一个正整数N(<=1e5),和两个小数r和f,表示树的结点总数和商品的原价以及每向下一层价格升高的幅度。下一行输入N个结点的父结点,-1表示为根节点。输出最深的叶子结点处购买商品的价格以及有几个深度最深的结点。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[100007];
 5 vector<int>v[100007];
 6 int mx;
 7 int ans[100007];
 8 void dfs(int x,int storey){
 9     mx=max(mx,storey);
10     ans[x]=storey;
11     for(auto it:v[x])
12         dfs(it,storey+1);
13 }
14 int main(){
15     int n;
16     int root=0;
17     double p,r;
18     cin>>n>>p>>r;
19     for(int i=1;i<=n;++i){
20         cin>>a[i];
21         if(a[i]==-1)
22             root=i-1;
23         else
24             v[a[i]].push_back(i-1);
25     }
26     dfs(root,0);
27     int num=0;
28     for(int i=0;i<n;++i)
29         if(ans[i]==mx)
30             ++num;
31     double sum=p*pow(1+r/100.0,mx);
32     printf("%.2lf %d",sum,num);
33     return 0;
34 }

 

 

 

posted @ 2019-11-21 14:36  sewage  阅读(170)  评论(0编辑  收藏  举报