PAT A1090 Highest Price in Supply Chain [树的遍历]

Posted doragd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT A1090 Highest Price in Supply Chain [树的遍历]相关的知识,希望对你有一定的参考价值。

题目描述

链接
给一棵树,在树根处货物的价格为p,然后每往下走一层,价格增加r%,求所有叶子结点的最高价格,以及这个价格的叶子结点个数

分析

  • 关键在于dfs怎么设计来保存这个最大值,以及最大值的个数
    别人的代码如下,比较巧。。。还用了个maxnum。。我怎么没想到
void dfs(int index, int depth) 
    if(v[index].size() == 0) 
        if(maxdepth == depth)
            maxnum++;
        if(maxdepth < depth) 
            maxdepth = depth;
            maxnum = 1;
        
        return ;
    
    for(int i = 0; i < v[index].size(); i++)
        dfs(v[index][i], depth + 1);

我的代码就是保存所有值,排序,然后再遍历求重复值

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+10;
vector<int> v[maxn];
int n,id, rt, cnt;
double p,r;
vector<int> ans;
bool cmp(int a, int b)
    return a > b;

void dfs(int root, int m)
    if(v[root].size()==0)
        ans.push_back(m);
        return;
    
    for(int i=0;i<v[root].size();i++)
        dfs(v[root][i], m+1);
    


void solve()
    dfs(rt, 0);
    sort(ans.begin(), ans.end(), cmp);
    for(int i=1;i<ans.size();i++)
        if(ans[i] == ans[0]) cnt++;
    
    double max_ans = pow(1+r/100, ans[0]) * p;
    printf("%.2f %d\n", max_ans, cnt+1);


int main()
    scanf("%d%lf%lf",&n,&p,&r);
    for(int i=0;i<n;i++)
        scanf("%d",&id);
        if(id != -1)
            v[id].push_back(i);
        else rt = i;
    
    solve();

以上是关于PAT A1090 Highest Price in Supply Chain [树的遍历]的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1090. Highest Price in Supply Chain

PAT1090:Highest Price in Supply Chain

PAT 1090 Highest Price in Supply Chain[较简单]

1090. Highest Price in Supply Chain (25)树——PAT (Advanced Level) Practise

PAT (Advanced Level) Practice 1090 Highest Price in Supply Chain (25 分) 凌宸1642

PAT (Advanced Level) 1090. Highest Price in Supply Chain (25)