求所有叶节点中的最高价以及这个价格的叶节点个数
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; vector<int>mp[N]; int num=0; int maxn=0; void dfs(int v,int step) { if(mp[v].size()==0) { if(step>maxn) { maxn=step;//更新最大深度 num=1;//重置最大深度的叶节点个数为1 } else if(step==maxn) { num++;//最大深度的叶节点个数+1 } return; } for(int i=0; i<mp[v].size(); i++) { dfs(mp[v][i],step+1); } } int main() { int n; double price,rate; scanf("%d %lf %lf",&n,&price,&rate); rate/=100.0; int root; for(int i=0; i<n; i++) { int x; scanf("%d",&x); if(x==-1) { root=i; continue; } mp[x].push_back(i); } dfs(root,0); printf("%.2f %d ",price*pow(1+rate,maxn),num); return 0; }