# PAT 甲级 1079 Total Sales of Supply Chain (25 分)（简单，不建树，bfs即可）

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

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:

where in the

### 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 1.

### 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，找到根节点，借用队列，一层层向外计算，当前节点的 val = 上一个的val * (1+r/100)

AC代码：

#include<bits/stdc++.h>
using namespace std;
int in[100005];
struct node{
double val;
vector<int>out;
}a[100005];
queue<int>q;
int xiao[100005];
int n;
double p,r;
double s=0;
int main(){
cin>>n>>p>>r;
memset(in,0,sizeof(in));
for(int i=0;i<n;i++){
int k;
cin>>k;
if(k==0) cin>>xiao[i];
for(int j=1;j<=k;j++){
int x;
cin>>x;
a[i].out.push_back(x);
in[x]++;
}
}
int root=-1;
for(int i=0;i<n;i++){
if(in[i]==0){
root=i;
break;
}
}
a[root].val=p;
q.push(root);
while(!q.empty()){
int x=q.front();
q.pop();
if(a[x].out.size()==0){
s+=xiao[x]*a[x].val;
}else{
double u=a[x].val*(1+r/100);
for(int i=0;i<a[x].out.size();i++){
int y=a[x].out.at(i);
a[y].val=u;
q.push(y);
}
}
}
printf("%.1f",s);
return 0;
}

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客