1090. Highest Price in Supply Chain (25)-dfs求层数

时间:2023-03-09 02:47:39
1090. Highest Price in Supply Chain (25)-dfs求层数

给出一棵树,在树根出货物的价格为p,然后每往下一层,价格增加r%,求所有叶子节点中的最高价格,以及该层叶子结点个数。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
/*
相当于求解树的层数
*/
using namespace std;
const int maxn=+;
int maxlayer=,num=;
int head[maxn];
int tot; struct Edge{
int to;
int next;
}edge[maxn]; void init(){
tot=;
memset(head,-,sizeof(head));
}
void add(int u,int v){
edge[tot].next=head[u];
edge[tot].to=v;
head[u]=tot++;
}
void dfs(int u,int layer){
if(head[u]==-){
if(layer>maxlayer){
maxlayer=layer;
num=;
}
else if(layer==maxlayer)
num++;
return;
}
for(int k=head[u];k!=-;k=edge[k].next){
int v=edge[k].to;
dfs(v,layer+);
}
} int main()
{
int v,root;
int n;
double p,r;
scanf("%d %lf %lf",&n,&p,&r);
init();
for(int i=;i<n;i++){
scanf("%d",&v);
if(v==-)
root=i;
else
add(v,i);
}
dfs(root,);
double ans=p*pow(+r/,maxlayer);
printf("%.2lf %d",ans,num);
return ;
}