printf中%0.1f采用的是四舍五入
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
int level[100000],LEVEL;
int sup[100000];
vector<int> node[100000];
void DFS(int src,int lvl){
level[src] = lvl;
for (int i = 0; i < node[src].size(); i++)
DFS(node[src][i], lvl + 1);
}
int main(){
freopen("1.in", "r", stdin);
int n;
double price, r;
scanf("%d%lf%lf", &n, &price, &r);
for (int i = 0; i < n; i++){
int num;
scanf("%d", &num);
if (!num)
scanf("%d", &sup[i]);
while (num--){
int index;
scanf("%d", &index);
node[i].push_back(index);
}
}
DFS(0,0);
double sales = 0;
for (int i = 0; i < n;i++)
if (!node[i].size()){
sales += price*pow(1 + r/100, level[i])*sup[i];
}
printf("%0.1lf\n", sales);
return 0;
}