【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);
}
posted @ 2021-03-04 23:05  Hyx'  阅读(52)  评论(0)    收藏  举报