#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
#define maxn 100010
struct node
{
double price;
vector<int> child;
}tree[maxn];
int N,head,cnt=0;
double init_price,r,max_price=0;
void level_order(int root)
{
queue<int> qu;
qu.push(root);
tree[root].price = init_price;
while (! qu.empty())
{
int front = qu.front();
qu.pop();
if(tree[front].price > max_price)
{
max_price = tree[front].price;
cnt = 1;
}
else if(tree[front].price == max_price)
{
cnt++;
}
for(int i=0; i<tree[front].child.size(); i++)
{
int child = tree[front].child[i];
tree[child].price = tree[front].price * (1.0 + r/100.0);
qu.push(child);
}
}
}
int main()
{
//读入数据
scanf("%d%lf%lf",&N,&init_price, &r);
//读入节点,并构造树
for(int i=0; i<N; i++)
{
int father;
scanf("%d",&father);
if(father == -1)
{
head = i;
}
else
{
tree[father].child.push_back(i);
}
}
//层序遍历
level_order(head);
//输出
printf("%.2f %d",max_price,cnt);
return 0;
}
1090. Highest Price in Supply Chain (25)
最新推荐文章于 2021-09-03 20:31:31 发布