PAT:1090. Highest Price in Supply Chain (25) AC
#include<stdio.h>
#include<vector>
using namespace std;
const int MAX=100010;
int DEPest=0,times=0;
vector<int> child[MAX]; //child[父亲][孩子] 二维数组表示树形结构
void DFS(int root,int depth)
{
if(child[root].size()==0) //叶子节点开始判断深度
{
if(depth>DEPest)
{
DEPest=depth;
times=1;
}
else if(depth==DEPest) //与最深深度相同,次数加1
++times;
return;
}
for(int i=0 ; i<child[root].size() ; ++i)
DFS(child[root][i],depth+1);
}
int main()
{
int root=-1,N;
double P,r;
scanf("%d%lf%lf",&N,&P,&r);
r/=100; //化为百分数
for(int i=0 ; i<N ; ++i)
{
int father;
scanf("%d",&father);
if(father==-1)
root=i;
else
{
child[father].push_back(i);
}
}
DFS(root,0);
double ans=P; //计算最高价格
for(int i=0 ; i<DEPest ; ++i)
ans=ans*(1+r);
printf("%.2f %d\n",ans,times);
return 0;
}