1090 Highest Price in Supply Chain (25 分)
思路
树的构造,肯定要设计一个结点数组,记录他的儿子了,二叉树就两个就固定设置两个int记录下标即可;别的树的儿子不固定,所以就使用vector数组进行存储。
这些都是树的静态写法,因为给定了每个每个结点的儿子们,如果没给,类似于二叉树那种重构二叉树就需要使用动态写法了。
这里搜树最深几层用到了DFS算法。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;
vector<int> child[maxn];
int N;
double P,r;
int maxDepth = 0;
int num =0;
void DFS(int index , int depth)
{
if(child[index].size()==0)
{
if(depth > maxDepth)
{
maxDepth = depth;
num=1;
}
else if(depth == maxDepth)
num+=1;
}
for(int i =0;i<child[index].size();i++)
{
DFS(child[index][i],depth+1);
}
}
int main()
{
int father,root;
cin>>N>>P>>r;
r /=100;
for(int i =0;i<N;i++)
{
cin>>father;
if(father == -1)root = i;
else
child[father].push_back(i);
}
DFS(root,0);
for(int i =0;i<maxDepth;i++)
P *=(1+r);
printf("%.2f %d\n",P,num);
}