#include<stdio.h> #include<vector> using namespace std; const int MAX=100010; int DEPest=0,times=0; vector<int> child[MAX]; //child[父亲][孩子] 二维数组表示树形结构 void DFS(int root,int depth) { if(child[root].size()==0) //叶子节点开始判断深度 { if(depth>DEPest) { DEPest=depth; times=1; } else if(depth==DEPest) //与最深深度相同,次数加1 ++times; return; } for(int i=0 ; i<child[root].size() ; ++i) DFS(child[root][i],depth+1); } int main() { int root=-1,N; double P,r; scanf("%d%lf%lf",&N,&P,&r); r/=100; //化为百分数 for(int i=0 ; i<N ; ++i) { int father; scanf("%d",&father); if(father==-1) root=i; else { child[father].push_back(i); } } DFS(root,0); double ans=P; //计算最高价格 for(int i=0 ; i<DEPest ; ++i) ans=ans*(1+r); printf("%.2f %d\n",ans,times); return 0; }
时间: 2024-11-05 15:38:59