【题意】
计算一个供销网络中零售商卖的总价
【思路】
DFS找到所有零售商即可,要记录路径的深度
【注意点】
这题的数据范围可达10^10,用float过不去,要用double
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
vector<vector<int>> members;
vector<bool> isRetailer;
double total,p,r;
void dfs(int index, int depth){
if(isRetailer[index]){
total += members[index][0]*pow(1+0.01*r,depth);
}
else{
for(int i=0; i<members[index].size(); i++){
dfs(members[index][i],depth+1);
}
}
}
int main(int argc, char const *argv[])
{
int n;
cin >> n >> p >> r;
members.resize(n);
isRetailer.assign(n,0);
for(int i=0; i<n; i++){
int k;
cin >> k;
if(k==0){
isRetailer[i] = 1;
int amount;
cin >> amount;
members[i].push_back(amount);
}
else{
members[i].resize(k);
for(int j=0; j<k; j++){
cin >> members[i][j];
}
}
}
total = 0.0;
dfs(0,0);
total *= p;
printf("%.1f", total);
system("pause");
return 0;
}