题目链接
版本1
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
vector<int> v[maxn],u;
int maxN=0;
double t=0;
void dfs(int r,double p, double c){
if(v[r].size()==0 ){
if(p > t){
t = p;
maxN=0;
}
if(p==t) maxN++;
return;
}
p = p * (1 + c/100.0);
for(int i=0;i<v[r].size();i++){
int j = v[r][i];
dfs(j,p,c);
}
}
int main(){
int n,k,num,tmp,root;
double price,inc;
cin>>n>>price>>inc;
for(int i=0;i<n;i++){
cin>>tmp;
if(tmp==-1){
root=i;
}else{
v[tmp].push_back(i);
}
}
dfs(root,price,inc);
printf("%.2f %d\n",t,maxN);
return 0;
}
版本2
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
vector<int> v[maxn],u;
int maxN=0,maxDepth=0;
void dfs(int r, int depth){
if(v[r].size()==0 ){
if(depth > maxDepth){
maxDepth=depth;
maxN=1;
}
else if(maxDepth==depth) maxN++;
return;
}
for(int i=0;i<v[r].size();i++){
int j = v[r][i];
dfs(j, depth+1);
}
}
int main(){
int n,tmp,root;
double price,inc;
cin>>n>>price>>inc;
for(int i=0;i<n;i++){
cin>>tmp;
if(tmp==-1){
root=i;
}else{
v[tmp].push_back(i);
}
}
dfs(root, 0);
printf("%.2f %d\n",price*pow(1+inc/100, maxDepth),maxN);
return 0;
}