https://blog.csdn.net/qq_44378358/article/details/100015090?utm_medium=distribute.pc_relevant.none-task-blog-title-5&spm=1001.2101.3001.4242
https://pintia.cn/problem-sets/1306872190793613312/problems/1306872454183321611
#include <iostream>
#include <cstdio>
#include <vector>
//#include <algorithm>
#include <cstring>
using namespace std;
double z,r,sum=0;
double selected[100010];
vector<int> child[100010];
void dfs(int index,double power){
if(selected[index]!=0){
sum=sum+power*selected[index];
}else{
for(int j=0;j<child[index].size();j++){
dfs(child[index][j],power*r);
}
}
return ;
}
int main()
{
memset(selected,0,sizeof(selected));
int n,m,k;
scanf("%d%lf%lf",&n,&z,&r);
r=(100-r)/100;
for(int i=0;i<n;i++){
scanf("%d",&m);
if(m==0){
scanf("%lf",&selected[i]);
}else{
for(int j=0;j<m;j++){
scanf("%d",&k);
child[i].push_back(k);
}
}
}
dfs(0,z);
printf("%d",(int)sum);
return 0;
}
原本出现了段错误
发现是数组访问越界了,访问了不能访问 的位置
//j<=child[index].size()这个是错误的,是娶不到的
for(int j=0;j<=child[index].size();j++){
dfs(child[index][j],power*r);
}
//正确写法应该这样,访问孩子
for(int j=0;j<child[index].size();j++){
dfs(child[index][j],power*r);
}