PAT甲级——1106 Lowest Price in Supply Chain(BFS)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90444872
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 lowest price a customer can expect from some retailers.
Input Specification:
Each input file contains one test case. For each case, The first line contains three positive numbers: N (≤), 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 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. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the lowest price we can expect from some retailers, accurate up to 4 decimal places, and the number of retailers that sell at the lowest price. There must be one space between the two numbers. It is guaranteed that the all the prices will not exceed 1.
Sample Input:
10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0
2 6 1
1 8
0
0
0
Sample Output:
1.8362 2
题目大意:在一个供应链(有向无权图)里,从供应商(源点)开始,每经过一个中间商就会加一次价格( P*(1+r%) ),消费者只能从零售商(叶节点)处购买产品,供应链不会形成环,求消费者最终可以拿到的最少的价位以及持此价格的零售商的个数。
思路:有很多方法,比如把供应链当成一棵树,找深度最浅的叶节点;我是把它作为一个有向无权图来考虑的,不管什么方法,总归是BFS或者DFS寻找叶节点,我使用的BFS(少用递归比较保险,毕竟要卡时间),把每个节点到源点的距离都算出来了,按理说找到最近的零售商就可以停止搜索了,但是考虑到测试点大概率会有遍历整张图的样例,所以说没必要优化了(其实是懒~),然后将零售商的距离排个序,找出最近的几个,算一下价格~
注意:价格变量要用double,因为float的精度不够,会卡住三个测试点。。
#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
vector <int> G[];
void BFS(vector <int> &dist);
int main()
{
int N, M, K;
double P, r;//注意,float的精度不够,会卡住三个测试点!!!
scanf("%d%lf%lf", &N, &P, &r);
vector <int> dist(N, -), retailer;
for (int i = ; i < N; i++) {
scanf("%d", &K);
if (K == ) {
retailer.push_back(i);//记录零售商
continue;
}
int u;
for (int j = ; j < K; j++) {
scanf("%d", &u);
G[i].push_back(u);
}
}
BFS(dist);
vector <int> rDist;
for (int i = ; i < retailer.size(); i++)
rDist.push_back(dist[retailer[i]]);//记录零售商的加价程度,也就是price的系数的指数
sort(rDist.begin(), rDist.end());//排序
int ansDist = rDist[], cnt = ;
for (int i = ; i < rDist.size(); i++) {
if (rDist[i] > ansDist)
break;
cnt++;
}
double price = pow( + r / 100.0, ansDist)*P;
printf("%.4lf %d\n", price, cnt);
return ;
}
void BFS(vector <int> &dist) {
int u, v;
queue <int> Q;
Q.push();
dist[] = ;
while (!Q.empty()) {
u = Q.front();
Q.pop();
for (int i = ; i < G[u].size(); i++) {
v = G[u][i];
if (dist[v] == -) {
dist[v] = dist[u] + ;
Q.push(v);
}
}
}
}
PAT甲级——1106 Lowest Price in Supply Chain(BFS)的更多相关文章
- PAT 甲级 1106 Lowest Price in Supply Chain
https://pintia.cn/problem-sets/994805342720868352/problems/994805362341822464 A supply chain is a ne ...
- PAT甲级——A1106 Lowest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- PAT Advanced 1106 Lowest Price in Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- [建树(非二叉树)] 1106. Lowest Price in Supply Chain (25)
1106. Lowest Price in Supply Chain (25) A supply chain is a network of retailers(零售商), distributors( ...
- PAT 1106 Lowest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- 1106. Lowest Price in Supply Chain (25)
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- PAT 甲级 1090 Highest Price in Supply Chain
https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944 A supply chain is a ne ...
- PAT甲级——A1090 Highest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- 【PAT甲级】1106 Lowest Price in Supply Chain (25分)
题意:输入一个正整数N(<=1e5),两个小数P和R,分别表示树的结点个数和商品原价以及每下探一层会涨幅的百分比.输出叶子结点深度最小的商品价格和深度最小的叶子结点个数. trick: 测试点1 ...
随机推荐
- <J2EE学习笔记>关于Servlet的讲义
题外话:接触java又是半年之前的事情了,当初好好学了java却把cpp给忘了,到现在又把手里发热的cpp给放下重新捡起来java,究竟这两种OOP语言我能不能清晰分开记住呢 以下全部课件来自于同济大 ...
- ZOJ - 3430 Detect the Virus —— AC自动机、解码
题目链接:https://vjudge.net/problem/ZOJ-3430 Detect the Virus Time Limit: 2 Seconds Memory Limit: 6 ...
- android自定义控件(二) 入门,继承View
转载请注明地址:http://blog.csdn.net/ethan_xue/article/details/7313788 ps: 可根据apidemo里LableView,list4,list6学 ...
- android如何查看网卡名和ip
我们知道,在windows下查看ip地址用ipconfig,在Linux下查看ip地址用ifconfig.今天在使用android查看的时候ifconfig却不管用: 查找网上资料发现,原来默认ifc ...
- Python 通用日志模块
import os base_dir=os.path.dirname(os.path.dirname(__file__)) base_db=os.path.join(base_dir,'db') ba ...
- spring cloud之简单介绍
以下是来自官方的一篇简单介绍: spring Cloud provides tools for developers to quickly build some of the common patte ...
- Jmeter查看结果树Unicode编码转中文方法
本文为转载微信公众号文章,如作者发现后不愿意,请联系我进行删除 在jmeter工具的使用中,不管是测试接口还是调试性能时,查看结果树必不可少,然而在查看响应数据时,其中的中文经常以Unicode的编码 ...
- java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter
转自:https://blog.csdn.net/rchm8519/article/details/23788053 1. ERROR - Context initialization failedo ...
- InetAddress 类简介
package javanet; import java.net.InetAddress; import java.net.UnknownHostException; public class dem ...
- SQLServer中连接个数及超时问题
超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 解决办法1.在代码里面,把未关闭的连接关闭2.扩大共享池,方法如下:解决方法可以是 ...