[PAT解题报告] Total Sales of Supply Chain

给了经销商,零售商,供应商的关系,其实就是一棵有根树,根节点售价已知,每下一层售价增加r%,这样我们可以知道每个叶节点(供应商)的售价,dfs即可。又知道每个叶节点要卖多少,所以乘一下累加就能得到最终总的收入。 我没有区分叶节点和中间节点,而是用了一个数组a,表示每个节点要卖多少,事实上非叶节点这个值是0,所以累加到总和叶没关系。

代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
using namespace std;

const int N = 100005;
vector<int> con[N];
int a[N];
double p[N],total,r;

void dfs(int father,int x) {
    if (father >= 0) {
        p[x] = p[father] * r;
    }
    total += p[x] * a[x];
    for (int i = 0; i < con[x].size(); ++i) {
        dfs(x, con[x][i]);
    }
}

int main() {
int n;
    scanf("%d%lf%lf",&n,p,&r);
    r = 1. + r / 100.;
    for (int i = 0; i < n; ++i) {
        int x;
        scanf("%d",&x);
        if (x == 0) {
            scanf("%d",&a[i]);
        }
        else {
            for (;x;--x) {
                int y;
                scanf("%d",&y);
                con[i].push_back(y);
            }
        }
    }    
    dfs(-1, 0);
    printf("%.1lf\n",total);
    return 0;
}

原题链接: http://www.patest.cn/contests/pat-a-practise/1079
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务