/*
题意:
给出N(代表总数),价格,倍率
求出所有叶节点货物量 * 层数*倍率
解题:
1、结构体
2、深度遍历
3、主结构s
learn && wrong:
1、pow倍率
2、深度遍历的写法
3、
结构体
p,r,ans
dfs实现
主函数,读入,并且更新利率
for循环,读入所有的值,
调用DFS
打印纸
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
const int maxn = 100010;
struct node {
double data; //数据域(货物量)
vector<int> child; //指针域
}Node[maxn]; //存放树
int n;
double p, r, ans = 0; //ans为叶节点货物的价格之和
void DFS(int index, int depth) {
if (Node[index].child.size() == 0) { //到达叶节点
ans += Node[index].data * pow(1 + r, depth); //累加叶节点货物的价格
return;
}
for (int i = 0;i < Node[index].child.size();i++) {
DFS(Node[index].child[i],depth + 1);
}
}
int main()
{
int k, child;
cin >> n >> p >> r;
r /= 100;
for (int i = 0;i < n;i++) {
cin >> k;
if (k == 0) {
scanf("%lf", &Node[i].data);
}
else {
for (int j = 0;j < k;j++) {
scanf("%d", &child);
Node[i].child.push_back(child); //child为节点i的子节点
}
}
}
DFS(0, 0); //DFS几点入口
printf("%.1f\n", p * ans); //输出结果
return 0;
}
网友评论