考查点:DFS或BFS
思路:直接用DFS即可,代码简洁,没有难度
#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define FOR(i, x, y) for(int i = x; i < y; i++)
#define rFOR(i, x, y) for(int i = x; i > = y; i--)
#define MAXN 100010
#define oo 0x3f3f3f3f
using namespace std;
struct node{
double data;
vector<int> child;
}Node[MAXN];
double ans;
double r,p;
int n;
void DFS(int index,int level)
{
if(Node[index].child.empty()){
ans+=p*pow(1+r/100,level)*Node[index].data;
return;
}
FOR(i,0,Node[index].child.size()){
DFS(Node[index].child[i],level+1);
}
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
scanf("%d%lf%lf",&n,&p,&r);
FOR(i,0,n)
{
int k;
scanf("%d",&k);
if(k){
FOR(j,0,k)
{
int x;
scanf("%d",&x);
Node[i].child.push_back(x);
}
}else{
scanf("%lf",&Node[i].data);
}
}
DFS(0,0);
printf("%.1f",ans);
return 0;
}