题目链接
解题思路:
说实话一开始没看懂题
就是一层一层的递减 然后如果是得道者那就翻倍 递归 用 dfs 统计得道者的功力
代码如下:
#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
vector<int> v[maxn];
double ans=0;//必须double
double r;
void dfs(int x,double z)
{
if(a[x])
ans+=(a[x]*z);
else
{
for(int i=0;i<v[x].size();i++)
dfs(v[x][i],z-z*r);
}
}
int main()
{
double z;
int n,i,j;
int k,x;
cin>>n>>z>>r;
r=r/100;//记得是减弱r
for(i=0;i<n;i++)
{
cin>>k;
if(k==0)
{
cin>>x;
a[i]=x;
}
else
{
while(k--)
{
cin>>x;
v[i].push_back(x);
}
}
}
dfs(0,z);
cout<<(int)ans<<endl;
return 0;
}