题目描述
知识点: 树的遍历
思路: 刷了n次的求树高。。。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N = 1e5+10;
int min_level=N,n,cnt;
double res,p,r;
int idx,ne[N],e[N],h[N];
void add(int a,int b){
ne[idx] = h[a],e[idx] = b,h[a] = idx++;
}
void dfs(int u,int l){
if(h[u] == -1 && l <= min_level){
if(l == min_level){
res = p*pow((1+r/100.0),min_level-1);
cnt++;
}else{
min_level = l;
res = p*pow((1+r/100.0),min_level-1);
cnt = 1;
}
}
for(int i = h[u];i != -1;i = ne[i]){
dfs(e[i],l+1);
}
}
int main(){
memset(h,-1,sizeof h);
cin>>n>>p>>r;
for(int i = 0;i < n;i++){
int m;
cin>>m;
while(m--){
int a;
cin>>a;
add(i,a);
}
}
dfs(0,1);
printf("%.4lf %d",res,cnt);
return 0;
}