多叉树的遍历,pat的题还是用scanf输入比较好,
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define sz(x) ((int) x.size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int N = 1e5 + 5;
int n;
double p, r, rec[N], ans;
vi tree[N];
void solve(int root, int level) {
if (!sz(tree[root])) {
ans += pow(1 + r, level) * p * rec[root];
return;
}
for (int i = 0; i < sz(tree[root]); i++) solve(tree[root][i], level + 1);
}
int main() {
cin >> n >> p >> r;
r /= 100;
for (int i = 0; i < n; i++) {
int k;
cin >> k;
if (!k) {
double x;
cin >> x;
rec[i] = x;
continue;
}
for (int j = 0; j < k; j++) {
int x;
cin >> x;
tree[i].pb(x);
}
}
solve(0, 0);
printf("%.1f", ans);
return 0;
}