建立好树结构后,从根结点走一遍DFS,碰到 retailer 加上其商品的钱数即可
#include <iostream>
#include <cstdio>
#include <vector>
#include <functional>
using namespace std;
struct Node{
int id;
int amount;
vector<int> neighbor;
Node(){}
Node(int i, int a) : id(i), amount(a){}
};
int main(){
int n;
double p, r;
scanf("%d%lf%lf", &n, &p, &r);
vector<Node> nodes(n);
for(int i = 0; i < n; ++i){
int k, id, num;
scanf("%d", &k);
if(k == 0){
scanf("%d", &num);
nodes[i] = Node(i, num);
}else{
nodes[i] = Node(i, -1);
for(int j = 0; j < k; ++j){
scanf("%d", &id);
nodes[i].neighbor.push_back(id);
}
}
}
double sum = 0;
function<void(int, double)> dfs = [&](int src, double price){
if(nodes[src].amount != -1){
sum += price * nodes[src].amount;
return;
}
for(auto& n : nodes[src].neighbor){
dfs(n, price*(1+r/100));
}
};
dfs(0, p);
printf("%.1f", sum);
return 0;
}
本文介绍了一种基于深度优先搜索(DFS)的算法实现,该算法用于计算一棵树形结构中零售商节点的商品总额。通过递归遍历树的每个节点,并根据不同类型的节点进行相应操作,最终得出整个树结构中所有零售商节点的商品总金额。
2201

被折叠的 条评论
为什么被折叠?



