基本思想:
层序和标记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; }
1079 Total Sales of Supply Chain (25point(s)) Easy only once *层数计算
原文:https://www.cnblogs.com/songlinxuan/p/12300510.html