PAT甲级-树的遍历-1090 Highest Price in Supply Chain解题思路

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wujiekd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值