方法:BFS。
注意:price需使用double变量,用float变量精确度不够,不能全通过。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn=100010;
double price[maxn],product[maxn],increment,sum=0;
vector<int> child[maxn];
int N;
bool vis[maxn]={0};
void BFS(){
queue<int> q;
q.push(0);
//vis[0]=true;
while(!q.empty()){
int t=q.front();
q.pop();
if(child[t].size()==0) sum+=price[t]*product[t];
for(int i=0;i<child[t].size();i++){
price[child[t][i]]=price[t]*(1+0.01*increment);
q.push(child[t][i]);
}
}
}
int main(){
scanf("%d%lf%lf",&N,&price[0],&increment);
for(int i=0;i<N;i++){
int numc,temp;
scanf("%d",&numc);
if(numc==0) scanf("%lf",&product[i]);
for(int j=0;j<numc;j++){
scanf("%d",&temp);
child[i].push_back(temp);
}
}
BFS();
printf("%.1f",sum);
return 0;
}