多叉树的遍历,下标(地址)和自己节点的数据是一样的,就可以用这种比较简单的储存方法,
#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, rec[N];
double p, r;
vi tree[N];
void solve(int root, int level) {
if (!sz(tree[root])) { rec[level]++; 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; scanf("%d", &k);
for (int j = 0; j < k; j++) {
int x; scanf("%d", &x);
tree[i].pb(x);
}
}
solve(0, 0);
int ans, num;
for (int i = 0; i < N - 1; i++) {
if (rec[i]) { ans = i; num = rec[i]; break;}
}
printf("%.4f %d", pow(1 + r, ans) * p, num);
return 0;
}