bfs遍历一下就行
double读入用lf才能读入,否则会出错
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1e5 + 10;
vector<int>a[maxn];
int n, v[maxn], k, id, num;
double pre[maxn],p,r;
int main()
{
scanf("%d%lf%lf", &n, &p, &r);
pre[0] = p;
for (int i = 0; i < n; i++)
{
scanf("%d", &k);
if (k == 0)
{
scanf("%d", &num);
v[i] = num;
}
else
while (k--)
{
scanf("%d", &id);
a[i].push_back(id);
}
}
queue<int>q;
q.push(0);
double sum = 0;
while (!q.empty())
{
int f = q.front(); q.pop();
if (a[f].size())
{
for (int i = 0; i < a[f].size(); i++)
pre[a[f][i]] = pre[f] * (1 + r / 100),q.push(a[f][i]);
}
else sum += pre[f] * v[f];
}
printf("%.1f\n", sum);
return 0;
}