PAT.A1079 Total Sales of Supply Chain

返回目录在这里插入图片描述

题意

给出一颗树根编号为0的树,树根处货物价格为p,从根节点往下一层,货物价格就要增加r%,再给出叶子结点的货物量,问所有叶子结点的价格之和。

样例(可复制)

10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3
//output
42.4

注意点

  1. 本题使用DFS和BFS都可以,下面的写法使用的是DFS,如果使用BFS,则可以考虑开两个queue < int >,一个记录编号,一个记录层数
  2. 本题node结构体中记录孩子节点使用vector而不用数组原因有二:①vector可以动态添加元素,不需要声明大小,如果使用数组,由于不知道最多的孩子结点个数,需要开比较大的空间,内存可能溢出。②vector自动修改和记录大小,不需要再使用一个变量记录孩子个数
#include<bits/stdc++.h>
using namespace std;

struct Node{
	double data;
	vector<int> child;
}node[100010];
int n,m,tmp;
double p,r,sum=0; 
void DFS(int root,int depth){
	if(node[root].child.size()==0){
		sum+=node[root].data*pow(1+r,depth);
		return;
	}
	for(int i=0;i<node[root].child.size();i++)DFS(node[root].child[i],depth+1);
}
int main(){
	cin>>n>>p>>r;
	r/=100;
	for(int i=0;i<n;i++){
		scanf("%d",&m);
		if(m==0){
			scanf("%lf",&node[i].data);
		}else{
			while(m--){
				scanf("%d",&tmp);
				node[i].child.push_back(tmp);
			}
		}
	}
	DFS(0,0);
	printf("%.1f\n",p*sum);
    return 0;
}
发布了177 篇原创文章 · 获赞 5 · 访问量 6671

猜你喜欢

转载自blog.csdn.net/a1920993165/article/details/105485822