這題的數據範圍可達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;
}