#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
#include<string>
#include<set>
#include<stack>
using namespace std;
int visit[100001]={0};
int MAX=-1;
int max1=0;
vector<int> p;
int j=0;
int a[100001];
void BFS( int index,int n,vector<int> v[])
{
queue<int> q;
int num=0;
q.push(index);
q.push(-1);
int t;
while(!q.empty())
{
t=q.front();
q.pop();
if(t==-1&&!q.empty())//到最后一次就不用判断
{
if(q.front()!=-1)//判断t是否为倒数第二个-1
num++;
if(num>MAX)
{
max1=j;
MAX=num;
}
j=0;
continue;
}
else if(q.empty()&&t==-1)//判断是否为最后 防止段错误
break;
visit[t]=1;
for(int i=0;i<v[t].size();i++)
if(!visit[v[t][i]])
{
j++;
q.push(v[t][i]);
}
if(q.front()==-1)
q.push(-1);
}
}
int main()
{
int n;
double p,d;
int x,y;
vector<int> v[100001];
scanf("%d%lf%lf",&n,&p,&d);
int root;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==-1)
root=i;//将根标记
}
for(int i=0;i<n;i++)
{
if(a[i]!=-1)
v[a[i]].push_back(i);
}
MAX=0;
BFS(root,n,v);
double sum=1;
for(int i=0;i<MAX;i++)
sum*=(1+d*0.01);
sum*=p;
if(n==1)//只有一个人的时候
max1=1;
printf("%.2lf %d\n",sum,max1);
}
PAT 1090. Highest Price in Supply Chain (25)
最新推荐文章于 2020-04-11 15:20:00 发布