#include<iostream>
#include<cstdio>
using namespace std;
struct Node
{
int parent; //父节点
bool flag; //是否是retailers
int level; //第几层
int num; //销售多少个
};
Node tt[100005];
int n;
double p,r,sum;
int Jisuan(int num)
{
if(tt[num].level!=-1)
return tt[num].level;
else
return Jisuan(tt[num].parent)+1;
}
double Count[100005];
void run()
{
scanf("%d",&n);
scanf("%lf%lf",&p,&r);
Count[0]=p;
for(int i=1; i<100005; i++)
{
Count[i]=Count[i-1]*(1.0+r/100.0);
}
for(int i=1; i<n; i++)
{
tt[i].level=-1;
}
tt[0].level=0;
for(int i=0; i<n; i++)
{
int tmp;
scanf("%d",&tmp);
if(tmp==0)
{
scanf("%d",&tmp);
tt[i].flag=true;
tt[i].num=tmp;
}
else
{
tt[i].flag=false;
for(int j=0; j<tmp; j++)
{
int t;
scanf("%d",&t);
tt[t].parent=i;
}
}
}
for(int i=1; i<n; i++)
{
tt[i].level=Jisuan(i);
}
sum=0.0;
for(int i=0; i<n; i++)
{
if(tt[i].flag==true) sum+=tt[i].num*Count[tt[i].level];
}
printf("%.1lf\n",sum);
}
int main()
{
run();
return 0;
}
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=100005;
struct Node
{
int parent; //父节点
vector<int> child; //孩子
int level; //第几层
int num; //销售多少个
};
Node tt[N];
int n;
double p,r,sum;
double Count[N];
void BFS()
{
queue<Node> Q;
Q.push(tt[0]);
tt[0].level=0;
while(!Q.empty())
{
Node tmp=Q.front();
Q.pop();
for(int i=0;i<tmp.child.size();i++)
{
tt[tmp.child[i]].level=tmp.level+1;
Q.push(tt[tmp.child[i]]);
}
}
}
void Init()
{
scanf("%d",&n);
scanf("%lf%lf",&p,&r);
Count[0]=p;
for(int i=1; i<N; i++)
{
Count[i]=Count[i-1]*(1.0+r/100.0);
}
for(int i=0; i<n; i++)
{
int tmp;
scanf("%d",&tmp);
if(tmp==0)
{
scanf("%d",&tmp);
tt[i].num=tmp;
}
else
{
tt[i].num=0;
for(int j=0; j<tmp; j++)
{
int t;
scanf("%d",&t);
tt[t].parent=i;
tt[i].child.push_back(t);
}
}
}
}
void Jisuan()
{
sum=0.0;
for(int i=0; i<n; i++)
{
if(tt[i].num) sum+=tt[i].num*Count[tt[i].level];
}
printf("%.1lf\n",sum);
}
int main()
{
Init();
BFS();
Jisuan();
return 0;
}