
思路很明显,但是代码实现的话有点困难,对我来说,这是参考柳大佬的代码,dfs部分一开始我想的是用递归实现 后来才明白 原来这个要dfs实现,虽然是暴力解法但是很nice
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> a;
int n,x,y;
double z,r,sum=0;
bool visit[100005];
void dfs(int index,double power){
if(visit[index]==true){
sum+=power*a[index][0];
return ;
}
for(int i=0;i<a[index].size();i++){
dfs(a[index][i],power*(1-r/100));
}
}
int main(){
fill(visit,visit+100005,false);
cin>>n>>z>>r;
a.resize(n);
for(int i=0;i<n;i++){
cin>>x;
if(x==0){
cin>>y;
a[i].push_back(y);
visit[i]=true;
}
else
while(x--){
cin>>y;
a[i].push_back(y);
}
}
dfs(0,z);
cout<<(int)sum;
return 0;
}