题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805388447170560
AC代码
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int> vis,amount;
unordered_map<int,vector<int>> f;
int n;
double p,r,tmp,num,sum=0.0;
void dfs(int root,int depth)
{
vis[root]=1;
if(amount[root]>0&&f[root].size()==0)
{
sum+=amount[root]*pow(1+r*0.01,depth)*p;
// cout<<root<<" "<<depth<<" "<<amount[root]<<endl;
}
for(int i=0;i<f[root].size();i++)
if(vis[f[root][i]]==0) dfs(f[root][i],depth+1);
}
int main()
{
cin>>n>>p>>r;
for(int i=0;i<n;i++)
{
cin>>tmp;
if(tmp==0)
{
cin>>num;
amount[i]=num;
continue;
}
else
{
while(tmp--)
{
cin>>num;
f[i].push_back(num);
}
}
}
dfs(0,0);
printf("%.1lf",sum);
}
总结
本题的解题思路是dfs,通过f和amount存储对应节点信息,最终通过dfs获得每个叶子节点的深度并按要求计算即可