[PAT] A1090 Highest Price in Supply Chain

tech2022-09-02  108

题目大意

给出供应链总人数、起始货源的价格、每次经销的涨幅;以及供应链中所有人的直接供应者的编号。求出最大价格和销售最大价格的销售者的人数。

思路

显然整个供应链可以看作一棵树。题目转化为给一棵树,在树根出货物的价格为p,然后每往下走一层,价格增加r%,求深度最大的结点的价格,以及这个价格的叶子结点个数。 用结构体存储结点,每个结点用变长数组存储它的下家。DFS遍历求出每个结点的深度;再经过一次循环找到最深深度和最深深度的结点个数(也可以放在遍历时求出)。最后计算价格即可。

AC代码

#define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<iostream> #include<vector> using namespace std; #define MAX 100000 struct node { int level; vector<int>child; }; node G[MAX]; void DFS(int v, int layer) { G[v].level = layer; for (int i = 0;i < G[v].child.size();i++) DFS(G[v].child[i], layer + 1); } int main() { int n, i, temp, s; double p, r; scanf("%d%lf%lf", &n, &p, &r); for (i = 0;i < n;i++) { scanf("%d", &temp); if (temp != -1)G[temp].child.push_back(i); else s = i; } DFS(s, 0); int maxLevel = 0, maxNum = 0; for (i = 0;i < n;i++) { if (G[i].level > maxLevel) { maxLevel = G[i].level; maxNum = 1; } else if (G[i].level == maxLevel)maxNum++; } for (i = 0;i < maxLevel;i++)p *= 1.0 + r / 100.0; printf("%.2lf %d", p, maxNum); return 0; }
最新回复(0)