【1079 25 bfs/dfs】 Total Sales of Supply Chain
传送门
题意
给⼀棵\(n\)个节点的树,在树根出货物的价格为\(p\),然后从根结点开始每往下⾛一层,该层的货物价格将会在⽗结点的价格上增加\(r%\),给出每个叶结点的货物量,求他们的价格之和
数据范围
\(n\leq 10^{5}\)
题解
- 输入的时候可以得到所有的叶节点,标记
bfs即可,每一层中都将叶节点计算即可
Code
#include<bits/stdc++.h>
using namespace std;
#define db double
const int N=1e5+10;
vector<int>edge[N];
int n,c[N];
db p,r,ans;
bool st[N],vis[N];
void bfs(){
queue<int>q;
q.push(0);
while(q.size()){
int sz=q.size();
for(int i=0;i<sz;i++){
int t=q.front(); q.pop();
if(st[t]) ans+=p*(db)c[t];
for(int j=0;j<edge[t].size();j++){
int to=edge[t][j];
q.push(to);
}
}
p=p*(1+r);
}
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>n>>p>>r;
r/=100;
for(int i=0;i<n;i++){
int k; cin>>k;
if(k==0){
cin>>c[i];
st[i]=1;
continue;
}
for(int j=0;j<k;j++){
int x; cin>>x;
edge[i].push_back(x);
}
}
bfs();
printf("%.1lf",ans);
}

浙公网安备 33010602011771号