PAT1079 Total Sales of Supply Chain

原文:我的個人博客

原題鏈接

1079 Total Sales of Supply Chain

考點

  樹的深度優先遍歷

思路

  給一棵樹,在樹根出貨物的價格爲p,然後從根結點開始每往下走一層,該層的貨物價格將會在父親結點的價格上增加r%,給出每個葉結點的貨物量,求他們的價格之和。
抽象爲樹的題目,給你每個節點的孩子節點。如果是葉子節點(零售商),就給你它的權重(商品數量),需要讓你求所有零售商賣出的商品總價格。因此需要記錄每個零售商的深度,也就是計算商品上漲了幾次r%。

代碼

#include <bits/stdc++.h>
using namespace std;
vector<int>tree[100010],leaf;
map<int,int>num;
map<int,int>height;//記錄每個節點的高度 
void dfs(int root,int depth){
    height[root]=depth;
    for(int i=0;i<tree[root].size();i++){
        dfs(tree[root][i],depth+1);
    }
}
int main(){
    int n,k,tmp;
    double p,r;
    cin>>n>>p>>r;
    for(int i=0;i<n;i++){
        cin>>k;
        if(k!=0){//非葉子節點 
            for(int j=0;j<k;j++){
                cin>>tmp;
                tree[i].push_back(tmp);
            } 
        }else{
            cin>>tmp;
            num[i]=tmp;//記錄零售商的商品總數 
            leaf.push_back(i);
        }
    }
    dfs(0,0); 
    double ans=0.0;
    for(int i=0;i<leaf.size();i++){
        ans += num[leaf[i]]*p*pow(1+r/100,height[leaf[i]]);
    }
    printf("%.1f",ans);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章