PAT A1090 Highest Price in Supply Chain (25 分) 树遍历

    题目大意:给出由retailers(零售商), distributors(经销商), and suppliers(供应商)构成的树,每层的售价比上层售价增加 r%,求出叶子节点的最高售价,以及具有最高售价的叶子节点数。

     与PAT A1079 Total Sales of Supply Chain类似,用dfs和bfs都可以做,用dfs可能写起来更简单,因为不用记录层数。

AC代码:

dfs:

#include 
#include 
using namespace std;

void dfs(int v, double price, double r, int &cnt, double &maxPrice, const vector> &tree)
{
    if(tree[v].size() == 0)
    {
        if(price > maxPrice)
        {
            cnt = 1;
            maxPrice = price;
        }
        else if(price == maxPrice)
            cnt++;
        return;
    }
    for (int i = 0; i < tree[v].size(); ++i)
        dfs(tree[v][i], price * (1 + r / 100), r, cnt, maxPrice, tree);
}

int main()
{
    int N;
    double p, r;
    scanf("%d%lf%lf", &N, &p, &r);
    vector> tree(N);
    int root = 0;
    for (int i = 0; i < N; ++i)
    {
        int index;
        scanf("%d", &index);
        if(index == -1) root = i;
        else tree[index].push_back(i);
    }
    int cnt = 0;
    double maxPrice = p;
    dfs(root, p, r, cnt, maxPrice, tree);
    printf("%.2f %d", maxPrice, cnt);
    return 0;
}


 

你可能感兴趣的:(PAT)