pat1079. Total Sales of Supply Chain (25)
1079. Total Sales of Supply Chain (25)
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。由于数量是long long级别,用DFS会段错误。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<stack>
#include<vector>
#include<set>
#include<map>
#include<queue>
using namespace std;
map<long long,vector<long long> > edge;
map<long long,long long> re;
int main(){
//freopen("D:\\INPUT.txt","r",stdin);
long long n,i,num,v;
double price,r,total=;
scanf("%lld %lf %lf",&n,&price,&r);
for(i=;i<n;i++){
scanf("%lld",&num);
if(!num){
scanf("%lld",&re[i]);
continue;
}
while(num){
scanf("%lld",&v);
edge[i].push_back(v);
num--;
}
}
queue<long long> q;
q.push();
long long cur;
long long last,e=;
//last记录当前层不为叶结点的节点
if(re.count()){//root可能也会直接向顾客出售
total+=price*re[];
q.pop();
}
r=r/;
price*=+r;//当前下一层向外卖的价格
while(!q.empty()){
cur=q.front();
q.pop();
for(i=;i<edge[cur].size();i++){
if(re.count(edge[cur][i])){
total+=price*re[edge[cur][i]];
continue;
}
q.push(edge[cur][i]);
last=edge[cur][i];
}
if(cur==e){
e=last;
price*=+r;
}
}
printf("%.1lf\n",total);
return ;
}
断错误的DFS。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<stack>
#include<vector>
#include<set>
#include<map>
using namespace std;
map<long long,vector<long long> > edge;
map<long long,long long> re;
map<long long,bool> vis;
void DFS(long long num,double &total,double price,double r){
vis[num]=true;
long long i;
if(!edge[num].size()){ //cout<<num<<endl; total+=re[num]*price;
return;
}
for(i=;i<edge[num].size();i++){
if(!vis[edge[num][i]]){
DFS(edge[num][i],total,price*(+r),r);
}
}
}
int main(){
//freopen("D:\\INPUT.txt","r",stdin);
long long n,i,num,v;
double price,r,total=;
scanf("%lld %lf %lf",&n,&price,&r);
for(i=;i<n;i++){
vis[i]=false;
scanf("%lld",&num);
if(!num){
scanf("%lld",&re[i]);
continue;
}
while(num){
scanf("%lld",&v);
edge[i].push_back(v);
num--;
}
}
DFS(,total,price,r/);
printf("%.1lf\n",total);
return ;
}
pat1079. Total Sales of Supply Chain (25)的更多相关文章
- PAT1079 :Total Sales of Supply Chain
1079. Total Sales of Supply Chain (25) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- 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 ...
- PAT-1079 Total Sales of Supply Chain (树的遍历)
1079. Total Sales of Supply A supply chain is a network of retailers(零售商), distributors(经销商), and su ...
- 1079. Total Sales of Supply Chain (25)-求数的层次和叶子节点
和下面是同类型的题目,只不过问的不一样罢了: 1090. Highest Price in Supply Chain (25)-dfs求层数 1106. Lowest Price in Supply ...
- 1079. Total Sales of Supply Chain (25)
时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A supply chain is a network of r ...
- 1079. Total Sales of Supply Chain (25) -记录层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...
- PAT Advanced 1079 Total Sales of Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
随机推荐
- java继承示例
package day07; class Fu { int num = 5; } class Zi extends Fu { int num =7; void show() { int num =9; ...
- ES6学习之对象扩展
简介表示法(直接写入变量和函数,作为对象的属性和方法) let x = "test" let obj={ x, //属性名为变量名,属性值为变量值 y(){console.log( ...
- Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法
不小心把下图方框中的logcat标签拖出来之后, 就变成了图2的浮动窗口,发现logcat标签怎么也弄不回原来窗口中的位置中. 其实解决方法很简单,只要拖住下图浮动窗口中红框位置的logcat标签,然 ...
- Java enum(枚举)使用详解之二
enum 对象的常用方法介绍 int compareTo(E o) 比较此枚举与指定对象的顺序. Class<E> getDeclaringClass() ...
- javascript数字千分分隔符
function thousandBitSeparator(num) { num=num.toFixed(2); return num && num .toString() .repl ...
- 每天一道算法题(1) ——不用乘除法求和1+2+…+n
题目:求1+2+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 方法1:使用函数指针. typedef int (*fu ...
- Java数组操作的10大方法
转载自码农网 译文链接:http://www.codeceo.com/article/10-java-array-method.html 英文原文:Top 10 Methods for Java Ar ...
- Hive 查询优化总结
一.join优化 Join查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边.原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存, ...
- tensorflow session会话控制
import tensorflow as tf # create two matrixes matrix1 = tf.constant([[3,3]]) matrix2 = tf.constant([ ...
- hdu1047
#include<stdio.h>#include<string>#include<iostream>using namespace std; //高精度加法//只 ...