版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36888550/article/details/88073026
分析
用C写这个 第一个想法是建一个child[1e5+2][1e5+2],感觉有点大 系统会崩,而且还得额外再建一个num[1e5+2]存储每个节点孩子数量,于是改用C++超棒的vector
万能头文件
#include<bits/stdc++.h>在C++中一个顶万个,写一个头文件包含所有常用头文件
这道题类似1079 Total Sales of Supply Chain,只是求得东西不一样(瞬间投奔C++)
代码
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5+10;
vector<int>child[MAX];
int num=0,maxn=0;
void dfs(int v,int h){
// printf("%d %d\n",v,child[v].size());
if(child[v].size()==0){
if(h>maxn){
maxn=h;num=1;
}else if(h==maxn) num++;
return;
}
for(int i=0;i<child[v].size();i++){
dfs(child[v][i],h+1);
}
}
int main(){
int n,k,m,root;
double price,rate;
scanf("%d %lf %lf",&n,&price,&rate);
for(int i=0;i<n;i++){
scanf("%d",&m);
if(m==-1) root=i;
else child[m].push_back(i);
}
dfs(root,0);
rate=1+rate/100;
printf("%.2lf %d",price*pow(rate,maxn),num);
return 0;
}