深度优先搜索求最深叶子结点
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> member[100010];
int mindepth=0x7fffffff,num=1;
void dfs(int index,int depth){
if(depth>mindepth)
return;
if(member[index].size()==0){
if(depth<mindepth){
mindepth=depth;
num=1;
}else if(depth==mindepth)
num++;
}
for(int i=0;i<member[index].size();i++){
dfs(member[index][i],depth+1);
}
}
int main(){
int n,k,c;
double P,r;
cin>>n>>P>>r;
for(int i=0;i<n;i++){
scanf("%d",&k);
for(int j=0;j<k;j++){
scanf("%d",&c);
member[i].push_back(c);
}
}
dfs(0,0);
double price=P*pow(1+r/100,mindepth);
printf("%.4lf %d",price,num);
return 0;
}