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;
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12300510.html