1 #include<iostream> 2 #include<algorithm> 3 #include<math.h> 4 using namespace std; 5 struct node{ 6 int l; 7 int w; 8 }data[100001]; 9 void build_tree(int root,int level,int n) 10 { 11 int l=level+1; 12 for(int i=0;i<n;i++) 13 { 14 if(data[i].w==root) 15 { 16 data[i].l=l; 17 build_tree(i,l,n); 18 } 19 } 20 } 21 int main() 22 { 23 24 int n; 25 double p,r; 26 cin>>n>>p>>r; 27 int root; 28 for(int i=0;i<n;i++) 29 { 30 cin>>data[i].w; 31 if(data[i].w==-1) 32 { 33 root=i; 34 data[i].l=0; 35 } 36 } 37 38 build_tree(root,0,n); 39 40 int max_l=0,num=0; 41 for(int i=0;i<n;i++) 42 { 43 44 if(data[i].l>max_l) 45 { 46 num=1; 47 max_l=data[i].l; 48 }else if(data[i].l==max_l) 49 num++; 50 } 51 double t=1+r*1.0/100; 52 printf("%.2f %d\n",pow(t,max_l)*p,num); 53 54 return 0; 55 }
有四个测试点超时。应该是要把递归程序转化为非递归。