PAT 1090. Highest Price in Supply Chain (25)

本文深入探讨了C++中使用队列进行树的层次遍历的技术,包括如何初始化队列、遍历过程以及如何通过层次遍历来计算树的深度。同时,文章还对比了不同遍历方式的效率,提供了优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<set>

#include<fstream>
using namespace std;

ifstream fin("1090.txt");
//#define cin fin
#define MAX 100005
int n;
double p, r;
int level[MAX] = { 0 };
vector<int> follow[MAX];
int main()
{
	cin >> n >> p >> r;
	int i, j, nn = n;
	int max_level = 0;
	int root = 0;
	int cnt = 0;
	queue<int> que, tmp;
	for (i = 0; i < n; i++)
	{
		int tmp; cin >> tmp;
		if (tmp != -1)
			follow[tmp].push_back(i);
		else
			root = i;
	}
	int now_level = 0;
	que.push(root);
	while (!que.empty())
	{
		int que_size = que.size();
		++now_level;
		while (!tmp.empty())
			tmp.pop();
		while (que_size--)
		{
			int root = que.front();
			int size = follow[root].size();
			for (i = 0; i < size; i++)
			{
				int elem = follow[root][i];
				tmp.push(elem);
				level[elem] = now_level;
			}
			que.pop();
		}
		que = tmp;
	}
	--now_level;
	for (i = 0; i < n;i++)
	if (level[i] == now_level)
		cnt++;
	while (now_level--)
		p *= (1 + r / 100);
	printf("%.2lf %d", p, cnt);
}
//考试时的做法有超时,可能向上找根确定level的做法会多次调用比较费时。早知用队列不超时就用它了(本来感觉遍历应该很费时的啊).好吧再研究一下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值