PAT:1079. Total Sales of Supply Chain (25) AC
#include<stdio.h>
#include<math.h>
#include<vector>
using namespace std;
const int MAX=100010;
int DEPest=0;
int root=-1,N;
double P,r,sum=0;
vector<int> child[MAX]; //child[父亲][孩子] 二维数组表示树形结构
double price[MAX]; //记录叶子节点的权值
void DFS(int root,int depth)
{
if(child[root].size()==0) //叶子节点开始判断深度
{
double p=pow(1+r,1.0*depth)*P; //【skill】转化为double型,乘以1.0
/*for(int i=0 ; i<depth ; ++i)
p*=(1+r);
*/
sum+=p*price[root]; //总价加上数量乘以单价
return;
}
for(int i=0 ; i<child[root].size() ; ++i)
DFS(child[root][i],depth+1);
}
int main()
{
scanf("%d%lf%lf",&N,&P,&r);
r/=100; //换算成百分数
for(int i=0 ; i<N ; ++i)
{
int father,tmp;
scanf("%d",&father);
if(father!=0)
{
for(int j=0 ; j<father ; ++j)
{
scanf("%d",&tmp);
child[i].push_back(tmp);
}
}
else
{
scanf("%lf",&price[i]); //叶子节点权值
}
}
DFS(0,0);
printf("%.1f",sum);
return 0;
}