和1106 Lowest Price in Supply Chain (25分) PAT类似
#include<cstdio>
#include<vector>
#include<iostream>
#include<queue>
#include<cmath>
#define maxn 100100
#define inf 1000000000
using namespace std;
struct node {
int d, l; // index, level
node(int _d, int _l) : d(_d), l(_l) {}
};
vector<int> child[maxn];
int parents[maxn];
int farest(int root, int &n) { // return level
int current_level = -1, num = 0;
queue<node> q;
q.push(node(root, 0));
while (!q.empty()) {
node temp = q.front();
int t = temp.d;
q.pop();
if (temp.l != current_level) {
num = 0;
current_level = temp.l;
}
num++;
for (int i = 0; i < child[t].size(); i++) {
q.push(node(child[t][i], temp.l + 1));
}
}
n = num;
return current_level;
}
int main() {
int N;
double P, R;
scanf("%d %lf %lf", &N, &P, &R);
int pa, root;
for (int i = 0; i < N; i++) {
scanf("%d", &pa);
if (pa == -1) {
root = i;
continue;
}
child[pa].push_back(i);
parents[i] = pa;
}
int num = 0;
int level = farest(root, num);
printf("%.2f %d\n", P * pow(1 + R * 0.01, level), num);
return 0;
}