原题
题目大意及思路
此题题干与 PAT1106 Lowest Price in Supply Chain(树、邻接表、DFS)一致,可参考该题的解题思路。
不同点:本题是算出所有节点的销量*售价,后者是比较得出最小售价。
代码
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
double ans=0,p,r;
const int maxn=100010;
vector<int> sale,child[maxn];
void DFS(int index,int depth){
if(child[index].size()==0){
ans+=p*pow(1+0.01*r,depth)*sale[index];
return;
}
for(int i=0;i<child[index].size();i++) DFS(child[index][i],depth+1);
}
int main(){
int n;
cin>>n>>p>>r;
sale.resize(n);
for(int i=0;i<n;i++){
int k;
cin>>k;
if(k==0) cin>>sale[i];
else{
child[i].resize(k);
for(int j=0;j<k;j++) cin>>child[i][j];
}
}
DFS(0,0);
printf("%.1lf\n",ans);
return 0;
}
运行截图
收获
有比较才有收获!