简单BFS
#include<stdio.h>
#include<vector>
#include<math.h>
#include<string.h>
#include<queue>
#define SIZE 100005
using namespace std;
vector<int> graph[SIZE];
int level[SIZE], retail,lvl;
void BFS(int s, int n){
queue<int>q;
level[s] = 0;
q.push(s);
int i;
retail = 1;
lvl = 0;
while (q.size()){
s = q.front();
q.pop();
for (i = 0; i < graph[s].size(); i++)
{
q.push(graph[s][i]);
level[graph[s][i]] = level[s] + 1;
if (level[graph[s][i]] > lvl)
{
lvl = level[graph[s][i]];
retail = 1;
}
else if (lvl == level[graph[s][i]])
retail++;
}
}
}
int main(){
freopen("1.in", "r", stdin);
int n;
double price, r;
scanf("%d%lf%lf", &n, &price, &r);
int i,index,s;
for (i = 0; i < n; i++){
scanf("%d", &index);
if (index == -1)
{
s = i;
continue;
}
graph[index].push_back(i);
}
BFS(s, n);
printf("%.2lf %d\n", price*pow(1 + r / 100, lvl), retail);
return 0;
}