1079 Total Sales of Supply Chain (25 分)树的静态实现+dfs

①价格只与递归层数有关,不必单独为每个结点设置价格,放在相应的递归层,所有当层结点共用
②这种直接给出孩子结点的,用树的静态实现,题目中说不会形成环,每个经销商或林受伤都只对应一个供应商,初始供应商也就是生产者只有一个,这些说明他是科树。
③初始供应商价格是p,在执行dfs时不应该抬价。

#include<bits/stdc++.h>
using namespace std;
struct node{
    
    
    vector<int> child;
    int amount=0;
}n[100000];
double N,p,r,sum=0;
void dfs(int root,double price){
    
    
    if(root!=0)
       price=price*(r/100+1);
    if(n[root].child.size()==0)
        sum+=n[root].amount*price;
    else{
    
    
        for(int i=0;i<n[root].child.size();i++)//看起来是层次遍历,其实调用了递归,会一直查询到叶子,然后再返回查询同层次的别的结点,是个深度搜索
            dfs(n[root].child[i],price);
    }
}
int main(){
    
    
    cin>>N>>p>>r;
    for(int i=0;i<N;i++)
    {
    
    
        int temp;
        cin>>temp;
        if(temp==0){
    
    
            cin>>n[i].amount;
        }
        else{
    
    
            for(int j=0;j<temp;j++)
            {
    
    
                int t;
                cin>>t;
                n[i].child.push_back(t);
            }
        }
    }
    dfs(0,p);
    printf("%.1lf",sum);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42835526/article/details/113700386