1079 Total Sales of Supply Chain (25point(s)) Easy only once *层数计算
基本思想:
层序和标记layer,别忘了;
关键点:
无;
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
struct node {
int data=-1;
vector<int>child;
int layer=-1;
};
vector<node>tree;
double cnt = 0;
int n;
double p;//初始价格
double r;//利率;
void leave_find(int index) {
if (tree[index].child.size() == 0) {
//如果是根节点;
cnt += p * tree[index].data*pow(0.01*r + 1, tree[index].layer);
return;
}
for (int i = 0; i < tree[index].child.size(); i++) {
leave_find(tree[index].child[i]);
}
}
void layer_init() {
if (tree.size() == 0)
return;
tree[0].layer = 0;
queue<int>q;
q.push(0);
while (!q.empty()){
int k = q.front();
q.pop();
for (int i = 0; i < tree[k].child.size(); i++) {
q.push(tree[k].child[i]);
tree[tree[k].child[i]].layer= tree[k].layer + 1;
}
}
}
int main() {
cin >> n >> p >> r;
tree.resize(n);
for (int i = 0; i < n; i++) {
if (i == 0) {
//找到根节点;
tree[i].layer = 0;
}
int m;
cin >> m;
tree[i].child.resize(m);
if (m != 0) {
for (int j = 0; j < m; j++) {
cin >> tree[i].child[j];
//tree[tree[i].child[j]].layer = tree[i].layer + 1;
}
}
else {
cin >> tree[i].data;
}
}
layer_init();
leave_find(0);
printf("%.01lf", cnt);
return 0;
}

浙公网安备 33010602011771号