#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int n;
double p,r;
vector<int> v[100005],pr[100005];
double sum=0;
void dfs(int index,int depth)
{ if(v[index].size()==0)
{
sum+=pr[index][0]*p*pow(1+r/100,depth);
return;
}
for(int i=0;i<v[index].size();i++)
dfs(v[index][i],depth+1);
}
int main()
{
int temp;
cin>>n>>p>>r;
for(int i=0;i<n;i++)
{int k;
scanf("%d",&k);
//没认真读题与以往是不同的还有商品的数量要特判
if(k==0) {
int prr=0;
cin>>prr;
pr[i].push_back(prr);
}
for(int j=0;j<k;j++)
{
scanf("%d",&temp);
v[i].push_back(temp);
}
}
dfs(0,0);
//42.4
printf("%.1f",sum);
return 0;
}
第一次自己做出来了 哈哈还好学习的大佬的思路解决这种题的思路很清晰
总结
1.题目一定要认真看 这次根节点0处也有信息是产品的数量,以前是没有信息的
2.注意自己利用的各种边界条件;
3.输入如果有问题 应该是题目没读清楚有一些东西没输进去
英语:
问题
1.BFS咋实现 此题dfs+depth=bfs 因为也有层数信息