使用深度优先搜索,传递深度
深度优先搜索函数返回当前节点的sales
#include <cstdio>
#include <vector>
using namespace std;
double product_price = 0.0;
double percent = 0;
struct Node {
int node_id;// this is not necessay
vector <int> child_vec;
int amount;
};
double power(int amount, int depth) {
double result = product_price;
while (depth--){
result *=percent;
}
return result*amount;
}
double DFS(int index, int & depth,Node *node_tree) {
Node *node = &(node_tree[index]);
if ((node->child_vec).size()==0) {
return power(node->amount,depth);
} else {
int node_num = (node->child_vec).size();
double node_sales=0;
depth ++;
for (int i=0;i<node_num;i++) {
int node_index = node->child_vec[i];
node_sales +=DFS(node_index,depth,node_tree);
}
return node_sales;
}
}
int main () {
int node_num;
double total_sales;
scanf ("%d%lf%lf",&node_num,&product_price,&percent);
percent = (100+percent)/100;
Node *node_tree = new Node[node_num];
for (int i = 0 ;i<node_num;i++) {
int child_num = 0;
scanf ("%d",&child_num);
node_tree[i].node_id = i;
if (child_num ==0) {
int amount;
scanf ("%d", &amount);
node_tree[i].amount = amount;
} else {
while(child_num--) {
int child_id;
scanf("%d",&child_id);
(node_tree[i].child_vec).push_back(child_id);
}
}
}
int depth = 0;
total_sales = DFS(0,depth,node_tree);
printf ("%.1f",total_sales);
delete [] node_tree;
}