#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 1000010;
struct node{
vector<int> child;
int level;
}node[N];
void levelorder(int root){
queue<int> q;
node[root].level = 0;
q.push(root);
while(!q.empty()){
int p = q.front();
q.pop();
for(int i = 0; i < node[p].child.size(); i++){
int temp = node[p].child[i];
q.push(temp);
node[temp].level = node[p].level + 1;
}
}
}
int main(){
int n ;
double p , r;
int root;
cin>>n>>p>>r;
for(int i = 0; i < n; i++){
int temp;
scanf("%d",&temp);
if(temp == -1) root = i;
else{
node[temp].child.push_back(i);
}
}
if(n == 1){
printf("%.2lf %d",p,n);
return 0;
}
levelorder(root);
int num = 0, maxlevel = 0;
double maxprice = p;
for(int i = 0; i < N; i++){
if(maxlevel < node[i].level) maxlevel = node[i].level;
}
for(int i = 0; i < N; i++){
if(maxlevel == node[i].level) num++; // 当只有一个点的话num = N,会导致一个1分的点不过
}
for(int i = 0; i < maxlevel; i++){
maxprice *=(1.0 + r/100);
}
printf("%.2lf %d",maxprice,num);
return 0;
}
当只有一个点的话
1090. Highest Price in Supply Chain (25)
最新推荐文章于 2021-09-03 20:31:31 发布