真坑啊,天天天天,我坑我自己
一开始是这样
一开始是BFS写错了,等于-1了还pop自己
然后测试点3怎么都过不了,调了一下发现,测试点3只有一层,然后原来的代码中,只有一层的情况会被忽略,原地爆炸
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
vector<int> child[100010];
int main(){
int n,root;scanf("%d",&n);
double unit,p;scanf("%lf %lf",&unit,&p);
p = 1 + p / 100;
for(int i = 0;i < n;i++) {
int temp;scanf("%d",&temp);
if(temp == -1) {root = i;continue;}
child[temp].push_back(i);
}
int maxrank = 0,finalnum = 0,num = 0;//num用来记录最后一层有多少人
queue<int> q;
q.push(root);q.push(-1);
while(q.size() > 1){
int temp = q.front();q.pop();num++;
if(temp == -1) {q.push(-1);maxrank ++;num = 0;continue;}
for(int i = 0;i < child[temp].size();i++) q.push(child[temp][i]);
}
//if(child[root].size() == 0)printf("0.00 0\n");
printf("%.2f %d\n",(double)pow(p,maxrank) * unit,num);
}