2019年2月8日
13:59
#include <iostream>
#include <map>
#include <vector>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 2e5 +5;
typedef struct P
{
vector<int> a;
int len, c;
}P;
P p[maxn];
void dfs(int i)
{
//cout << i << endl;
if(p[i].len == 0)
{
return ;
}
for(int j = 0; j < p[i].len ; j++)
{
int x = p[i].a[j];
p[x].c = p[i].c + 1;
dfs(x);
}
}
void bfs()
{
queue<int> q;
int i = 0;
q.push(i);
while(q.size() != 0)
{
int x = q.front();
for(int j = 0; j < p[x].len; j++)
{
int y = p[x].a[j];
q.push(y);
p[y].c = p[x].c + 1;
}
q.pop();
}
return;
}
double pow(double a, int b)
{
double c = 1;
while(b)
{
if(b & 1)
{
c = a * c;
}
a = a * a;
b >>= 1;
}
return c;
}
int main()
{
int n, k, x, y;
int mp[maxn];
double pr, r;
while(cin >> n >> pr >> r)
{
for(int i = 0; i < n; i++)
{
scanf("%d", &k);
p[i].len = k;
p[i].c = 0;
if(k != 0)
{
for(int j = 0; j < k; j++)
{
scanf("%d", &x);
p[i].a.push_back(x);
}
}
else
{
scanf("%d", &x);
mp[i] = x;
}
}
///dfs(0);
bfs();
double s = 0;
for(int i = 0 ; i < n; i++)
{
//cout << p[i].c << endl;
if(mp[i] != 0)
{
s += mp[i] * pow(1 + r * 0.01, p[i].c);
}
}
printf("%.1f\n", s * pr);
}
return 0;
}