/*
題意:
給出N(代表總數(shù)),價(jià)格,倍率
求出所有葉節(jié)點(diǎn)貨物量 * 層數(shù)*倍率
解題:
1、結(jié)構(gòu)體
2、深度遍歷
3、主結(jié)構(gòu)s
learn && wrong:
1、pow倍率
2、深度遍歷的寫(xiě)法
3、
結(jié)構(gòu)體
p,r,ans
dfs實(shí)現(xiàn)
主函數(shù),讀入,并且更新利率
for循環(huán),讀入所有的值,
調(diào)用DFS
打印紙
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
const int maxn = 100010;
struct node {
double data; //數(shù)據(jù)域(貨物量)
vector<int> child; //指針域
}Node[maxn]; //存放樹(shù)
int n;
double p, r, ans = 0; //ans為葉節(jié)點(diǎn)貨物的價(jià)格之和
void DFS(int index, int depth) {
if (Node[index].child.size() == 0) { //到達(dá)葉節(jié)點(diǎn)
ans += Node[index].data * pow(1 + r, depth); //累加葉節(jié)點(diǎn)貨物的價(jià)格
return;
}
for (int i = 0;i < Node[index].child.size();i++) {
DFS(Node[index].child[i],depth + 1);
}
}
int main()
{
int k, child;
cin >> n >> p >> r;
r /= 100;
for (int i = 0;i < n;i++) {
cin >> k;
if (k == 0) {
scanf("%lf", &Node[i].data);
}
else {
for (int j = 0;j < k;j++) {
scanf("%d", &child);
Node[i].child.push_back(child); //child為節(jié)點(diǎn)i的子節(jié)點(diǎn)
}
}
}
DFS(0, 0); //DFS幾點(diǎn)入口
printf("%.1f\n", p * ans); //輸出結(jié)果
return 0;
}