zoukankan      html  css  js  c++  java
  • 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
    ", 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();
    }
    
    
  • 相关阅读:
    Django学习2
    Django学习1
    python 基于tcp协议的文件传输3_解决粘包问题
    python socketserver
    python hashlib
    python struct模块
    python json 模块
    python socket模块
    13暑假集训#10 总结
    hdu 4493 卡输入输出
  • 原文地址:https://www.cnblogs.com/doragd/p/11284882.html
Copyright © 2011-2022 走看看