A1079 Total Sales of Supply Chain (25分)

/*
题意:
给出N(代表总数),价格,倍率
求出所有叶节点货物量 * 层数*倍率
解题:
1、结构体
2、深度遍历
3、主结构s

learn && wrong:
1、pow倍率
2、深度遍历的写法
3、
结构体
p,r,ans
dfs实现
主函数,读入,并且更新利率
for循环,读入所有的值,
调用DFS
打印纸
*/

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
using namespace std;

const int maxn = 100010;

struct node {
    double data;    //数据域(货物量)
    vector 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;
}

你可能感兴趣的:(A1079 Total Sales of Supply Chain (25分))