1079. Total Sales of Supply Chain (25) -记录层的BFS改进
题目如下:
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.
Input Specification:
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.
Output Specification:
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.
Sample Input:
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
Sample Output:
42.4
题目要求根据某商品的供应链条,求零售商的销售额之和,零售商的售价不同在于每一级都有涨幅,这个问题的本质就是BFS,对不同层的零售商按照所在层求销售额,然后全部加和。
因为只有叶子结点才是零售商,因此不能额外统计非零售商的情况,我们不区分叶子结点,而是让所有非叶子结点的销售量为0,这样就可以统一问题,计数全部结点了。
本题目中的图是一棵树,因此不必用visited来记录结点访问情况,因为不会出现重复访问的情况。
要记录层,定义变量tail和last,tail代表下一层的尾巴,last代表本层的尾巴,首先让last和tail都初始化为源点,接着在邻接点遍历时一直用tail记录该邻接点,当last和当前出队结点v一致时,说明这一层结束,这时候last指向的恰是这一层最后一个元素的最后一个邻接点,也就是下一层的尾巴,因此这时候让last=tail,就可以按照同样的逻辑进行下一层。
在每次换层时注意对价格的处理,对每个出队结点计算销售额,加和即可。
代码如下:
#include <iostream>
#include <vector>
#include <stdio.h>
#include <queue> using namespace std; int main()
{
int N;
double rootPrice,percent;
cin >> N >> rootPrice >> percent;
vector<vector<int> > graph(N);
vector<int> nodeSales(N);
for(int i = 0; i < N; i++){
int cnt,num;
scanf("%d",&cnt);
if(cnt == 0){
scanf("%d",&num);
nodeSales[i] = num;
graph[i].clear();
continue;
}else{
nodeSales[i] = 0;
}
for(int j = 0; j < cnt; j++){
scanf("%d",&num);
graph[i].push_back(num);
}
}
queue<int> q;
q.push(0);
double sum = 0;
double factor = rootPrice;
int tail = 0;
int last = 0;
while(!q.empty()){ int v = q.front();
q.pop(); sum += nodeSales[v] * factor; for(int i = 0; i < graph[v].size(); i++){
int w = graph[v][i];
q.push(w);
tail = w;
} if(v == last){
factor *= (1 + percent / 100);
last = tail;
} } printf("%.1lf\n",sum); return 0;
}
1079. Total Sales of Supply Chain (25) -记录层的BFS改进的更多相关文章
- 1079. Total Sales of Supply Chain (25)【树+搜索】——PAT (Advanced Level) Practise
题目信息 1079. Total Sales of Supply Chain (25) 时间限制250 ms 内存限制65536 kB 代码长度限制16000 B A supply chain is ...
- PAT 甲级 1079 Total Sales of Supply Chain (25 分)(简单,不建树,bfs即可)
1079 Total Sales of Supply Chain (25 分) A supply chain is a network of retailers(零售商), distributor ...
- 1090. Highest Price in Supply Chain (25) -计层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...
- 1079. Total Sales of Supply Chain (25)-求数的层次和叶子节点
和下面是同类型的题目,只不过问的不一样罢了: 1090. Highest Price in Supply Chain (25)-dfs求层数 1106. Lowest Price in Supply ...
- PAT Advanced 1079 Total Sales of Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- 1079. Total Sales of Supply Chain (25)
时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A supply chain is a network of r ...
- PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
- 【PAT甲级】1079 Total Sales of Supply Chain (25 分)
题意: 输入一个正整数N(<=1e5),表示共有N个结点,接着输入两个浮点数分别表示商品的进货价和每经过一层会增加的价格百分比.接着输入N行每行包括一个非负整数X,如果X为0则表明该结点为叶子结 ...
- pat1079. Total Sales of Supply Chain (25)
1079. Total Sales of Supply Chain (25) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
随机推荐
- 洛谷P3164 [CQOI2014]和谐矩阵
高斯消元,可以直接消的 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...
- 洛谷mNOIP模拟赛Day2-入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- c语言第四次作业
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
- Servlet中service()方法
在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽 ...
- ionic 禁用 手势 滑动返回
$ionicConfigProvider.views.swipeBackEnabled(false); 在 应用的 config里面 配置下 上面的那句话 就OK了.
- a标签href无值 onclick事件跳转
<a href='#' onclick='gomore()'>更多>></a> 单击无反应 <a href='javascript:void(0)' o ...
- rabbitMQ权限相关命令
权限相关命令为: (1) 设置用户权限 rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP (2) 查看(指 ...
- Java面试18|关于进程、线程与协程
1.IPC(Inter-Process Communication,进程间通信)与线程通信的几种方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进 ...
- Vasya the Hipster
One day Vasya the Hipster decided to count how many socks he had. It turned out that he had a red so ...
- Docker多台物理主机之间的容器互联
Docker 默认的桥接网卡是 docker0.它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth* 而 Docker 只是把所有这些网卡桥接在一起,如下: [root ...