2021-04-03 PAT 1090

真坑啊,天天天天,我坑我自己
一开始是这样


image.png

一开始是BFS写错了,等于-1了还pop自己
然后测试点3怎么都过不了,调了一下发现,测试点3只有一层,然后原来的代码中,只有一层的情况会被忽略,原地爆炸

#include
#include
#include
#include
using namespace std;
vector 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 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);
}

你可能感兴趣的:(2021-04-03 PAT 1090)