题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805388447170560
注意点
这道题p、t的类型必须设置成double不然会有4个测试点错误
代码
#include<vector>#include<algorithm>#include<iostream>#include<cmath>using namespace std;const int maxn = 100010;int n;double p, t, sum = 0;struct Node{float amount;vector<int> child;}node[maxn];void DFS(int root, int count){if(node[root].child.size() == 0){sum += p * node[root].amount * pow(1 + t, count);return;}for(int i = 0; i < node[root].child.size(); i++){DFS(node[root].child[i], count + 1);}}int main(){//n是成员人数,p是基本价格,t是每层中间商的多收价格int child_num, child_temp, amount_temp;scanf("%d%lf%lf", &n, &p, &t);t /= 100;for(int i = 0; i < n; i++){scanf("%d", &child_num);if(child_num != 0){for(int j = 0; j < child_num; j++){scanf("%d", &child_temp);node[i].child.push_back(child_temp);node[i].amount = 0;}} else {scanf("%f", &node[i].amount);}}DFS(0, 0);printf("%.1f", sum);return 0;}
