题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944
注意
不能用map,会出现段错误;使用unordered_map是因为它不需要排序效率较高,能够满足题目要求
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,root=-1,maxdepth=0,cnt=0;
double p,r;
unordered_map<int,vector<int>> f;
void dfs(int root,int depth)
{
if(f[root].size()==0){
if(depth>maxdepth) {
maxdepth=depth;
cnt=1;
}
else if(depth==maxdepth)
cnt++;
return;
}
for(int i=0;i<f[root].size();i++)
dfs(f[root][i],depth+1);
}
int main()
{
cin>>n>>p>>r;
for(int i=0;i<n;i++)
{
int t;
cin>>t;
if(t!=-1) f[t].push_back(i);
else root=i;
}
dfs(root,0);
printf("%.2lf %d",p*pow((1+r/100),maxdepth),cnt);
}