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

点点圈 提交于 2019-12-05 04:23:48

题意:

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

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[100007];
vector<int>v[100007];
int mx;
int ans[100007];
void dfs(int x,int storey){
mx=max(mx,storey);
ans[x]=storey;
for(auto it:v[x])
dfs(it,storey+1);
}
int main(){
//ios::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
int n;
int root=0;
double p,r;
cin>>n>>p>>r;
for(int i=1;i<=n;++i){
cin>>a[i];
if(a[i]==-1)
root=i-1;
else
v[a[i]].push_back(i-1);
}
dfs(root,0);
int num=0;
for(int i=0;i<n;++i){
if(ans[i]==mx){
++num;
}
}
double sum=p*pow(1+r/100.0,mx);
printf("%.2lf %d",sum,num);
return 0;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!