码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-01 20:15:34      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:for   tor   index   amp   class   cto   i++   main   https   

题目描述

链接
给一棵树,在树根处货物的价格为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 [树的遍历]

标签:for   tor   index   amp   class   cto   i++   main   https   

原文地址:https://www.cnblogs.com/doragd/p/11284882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!