题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944
思路:直接存图dfs即可
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
vector <int> g[maxn];
bool vis[maxn];
double r;
int cnt;
double ans;
void dfs(int u , double p) {
vis[u] = 1;
if(ans < p) {
ans = p;
cnt = 1;
}
else if(ans == p)cnt++;
for(int i = 0; i < g[u].size(); i++) {
if(!vis[g[u][i]])
dfs(g[u][i] , p * (1 + r*0.01));
}
}
int main() {
int n;
double p;
scanf("%d%lf%lf",&n,&p,&r);
int u;
for(int i = 0; i < n; i++) {
int v;
scanf("%d",&v);
if(v != -1)g[v].push_back(i);
else u = i;
}
dfs(u,p);
printf("%.2f %d\n",ans,cnt);
return 0;
}