题目
思路
静态树的存储、树的遍历(深度广度都行)
这里可以使用销量的负值存储在零销商对应的vector数组中,以免对每个结点标记是否是零销商浪费空间。
代码
#include <iostream>
#include<vector>
using namespace std;
#define nmax 100005
#define inf 999999
vector<vector<int>> tree;
int n;
double p, r;
double sum = 0;
void DFS(int cur, double money) {
if (tree[cur].size() == 1 && tree[cur][0] <= 0)
sum += money * (-tree[cur][0]);
else {
for (auto& p:tree[cur]) {
DFS(p, money * (100 + r) / 100);
}
}
}
int main()
{
cin >> n >> p >> r;
tree.resize(n);
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
if (num == 0) {
int tmp;
cin >> tmp;
tree[i].emplace_back(-tmp);
}
else {
for (int j = 0; j < num; ++j) {
int tmp;
cin >> tmp;
tree[i].emplace_back(tmp);
}
}
}
DFS(0,p);
printf("%.1lf", sum);
return 0;
}