1079 Total Sales of Supply Chain-PAT甲级

题目描述

A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier to customer.
Starting from one root supplier, everyone on the chain buys products from one's supplier in a price P and sell or distribute them in a price that is r% higher than P.  Only the retailers will face the customers.
It is assumed that each member in the supply chain has exactly one supplier except the root supplier, and there is no supply cycle.
Now given a supply chain, you are supposed to tell the total sales from all the retailers.

 

输入描述:

Each input file contains one test case.  For each case, the first line contains three positive numbers: N (<=105), the total number of the members in the supply chain (and hence their ID's are numbered from 0 to N-1, and the root supplier's ID is 0); P, the unit price given by the root supplier; and r, the percentage rate of price increment for each distributor or retailer.  Then N lines follow, each describes a distributor or retailer in the following format:
Ki ID[1] ID[2] ... ID[Ki]
where in the i-th line, Ki is the total number of distributors or retailers who receive products from supplier i, and is then followed by the ID's of these distributors or retailers.  Kj being 0 means that the j-th member is a retailer, then instead the total amount of the product will be given after Kj.  All the numbers in a line are separated by a space.


 

输出描述:

For each test case, print in one line the total sales we can expect from all the retailers, accurate up to 1 decimal place.  It is guaranteed that the number will not exceed 1010.

 

输入例子:

10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3

 

输出例子:

42.4

树的遍历,从父节点开始。利用vector数组的形式

关于inner_product函数的介绍如下:‘

 

来源:inner_product是c++标准库封装的一个函数。

函数原型:inner_product(beg1, end1, beg2, init)

inner_product(beg1, end1, beg2, init, BinOp1, BinOp2)

函数介绍:

返回作为两个序列乘积而生成的元素的总和。步调一致地检查两个序列,将

来自两个序列的元素相乘,将相乘的结果求和。由 init 指定和的初值。假定从

beg2 开始的第二个序列具有至少与第一个序列一样多的元素,忽略第二个序列

中超出第一个序列长度的任何元素。init 的类型决定返回类型。

第一个版本使用元素的乘操作符(*)和加操作符(+):给定两个序列 2,3,5,8

和 1,2,3,4,5,6,7,结果是初值加上下面的乘积对:

initial_value + (2 * 1) + (3 * 2) + (5 * 3) + (8 * 4)

如果提供初值 0,则结果是 55。

第二个版本应用指定的二元操作,使用第一个操作代替加而第二个操作代替

乘。作为例子,可以使用 inner_product 来产生以括号括住的元素的名-值对

的列表,这里从第一个输入序列获得名字,从第二个序列中获得对应的值:

// combine elements into a parenthesized, comma-separated pair

string combine(string x, string y)

{

return "(" + x + ", " + y + ")";

}

// add two strings, each separated by a comma

string concatenate(string x, string y)

{

if (x.empty())

return y;

return x + ", " + y;

}

cout << inner_product(names.begin(), names.end(),

values.begin(), string(),

concatenate, combine);

如果第一个序列包含 if、

string 和 sort,

且第二个序列包含 keyword、

library

type 和 algorithm,则输出将是

(if, keyword), (string, library type), (sort, algorithm)

两种解法:

满分代码如下:dfs

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int sum[N];
double price[N];
vector<int>ve[N];
int n;
double p,r;
void dfs(int v){
	for(int i:ve[v]){
		price[i]=price[v]*(1+r/100);
		dfs(i);
	}
}
int main(){
	//ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>p>>r;
	price[0]=p;
	int num,id;
	for(int i=0;i<n;i++){
		cin>>num;
		if(num==0){
			cin>>id;
			sum[i]=id;
		}else{
			for(int j=0;j<num;j++){
				cin>>id;
				ve[i].push_back(id);
			}
		}
	}
	double cnt=0;
	for(int i=0;i<n;i++){
		if(sum[i]>0){
			cnt+=(sum[i]*price[i]);
		}
	}
	dfs(0);
	cnt=inner_product(price,price+n,sum,0.0);
	printf("%.1f\n",cnt);
	return 0;
}

满分代码如下:bfs

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int sum[N];
double price[N];
vector<int>ve[N];
int n;
double p,r;
void bfs(int v){
	queue<int>q;
	q.push(v);
	while(!q.empty()){
		int t=q.front();
		q.pop();
		for(int i:ve[t]){
			price[i]=price[t]*(1+r/100);
			q.push(i);
		}
	}
}
int main(){
	//ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>p>>r;
	price[0]=p;
	int num,id;
	for(int i=0;i<n;i++){
		cin>>num;
		if(num==0){
			cin>>id;
			sum[i]=id;
		}else{
			for(int j=0;j<num;j++){
				cin>>id;
				ve[i].push_back(id);
			}
		}
	}
	double cnt=0;
	for(int i=0;i<n;i++){
		if(sum[i]>0){
			cnt+=(sum[i]*price[i]);
		}
	}
	bfs(0);
	cnt=inner_product(price,price+n,sum,0.0);
	printf("%.1f\n",cnt);
	return 0;
}

 

 

 

 

 

这些文档涵盖了5G网络优化的多个方面,包括**载波聚合、干扰管理、负载均衡、电调核查等**。以下是对这些文档内容的详细总结: #### **5G网络优化中的载波聚合技术** - **载波聚合的定义和作用**: - 载波聚合(CA)是3GPP在Release 10阶段引入的技术,通过将多个连续或非连续的载波聚合成更大的带宽,提高整网资源利用率和用户体验。 - **开启步骤及脚本**: - 确认站内是否有CA License。 - 添加CA组并配置相关参数。 - 基站盲配置开关打开,激活门限设置,增加CA小区集辅小区配置。 - **载波聚合A5测量事件开关的作用**: - A5测量事件开关打开时,支持CA的UE会A4转A5,调整A5门限1到-43dBm,类似于走A4事件触发异频切换。 - 关闭时,当UE处于载波聚合状态下才会将A4转A5,但不会调整A5门限1。 #### **干扰管理和优化** - **系统外干扰**: - 信号放大器和信号屏蔽器是主要的干扰源。解决建议包括协调推进信号放大器关、替、拆工作,引导用户使用VOLTE业务,以及联系公安进行收缴关闭信号屏蔽器。 - **系统内干扰**: - 包括杂散干扰、阻塞干扰和互调干扰。解决方法包括调整天面、增加隔离度,加装滤波器等。 #### **移动性负载均衡(MLB)配置方案** - **背景描述**:随着LTE用户数的快速发展,部分小区的用户数或PRB利用率已接近容量极限。MLB是指eNodeB判断小区的负载状态,当小区处于高负载状态时,将负载高小区中部分UE转移到负载低的小区,平衡异频或异系统之间的负载。 - **方案分析与实施**: - 方案介绍:MLB分为触发模式、选择目标小区、负载均衡执行三个阶段。根据这三个维度可划分为以下各种类型。 - 配置原则:确定候选邻区,交互负载信息,识别交互邻区和盲邻区,确定目标小区列表。 - 均衡执行:现网采用切换的方式转移同步态用户,RRC connection release方式转移空闲态用户。 - 三种均衡方式的优缺点对比:异频同步态用户数均衡(转移同步态用户)、异频同步态用户数均衡(转移空闲态用户)、异频空闲态UE预均衡。 #### **FDD电调核查及修改方法** - **FDD侧电调修改方法**:查询电调天线配置信息和子单元配置信息,可以查询/修改电子下倾角。 - **GSM侧电调修改方法**:查询天线设备编号、框槽号及天线设备序列号等信息。 - **常见的天线类型及匹配问题**:HW天线是现网绝大多数天线类型,需特别注意设备厂家编码和设备序列号的匹配问题。 综上所述,这些文档详细介绍了5G网络优化中的关键技术和方法,从载波聚合到干扰管理再到移动性负载均衡和FDD电调核查等方面提供了全面的指导和解决方案。通过这些内容的学习和应用,可以有效提升5G网络的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值