题意:
输入一个正整数N(<=1e5),表示共有N个结点,接着输入两个浮点数分别表示商品的进货价和每经过一层会增加的价格百分比。接着输入N行每行包括一个非负整数X,如果X为0则表明该结点为叶子结点接着输入一个整数表示该零售商进货的数量,X不为零则接着输入X个正整数表示它的下级经销商是哪些结点。输出所有零售商进货的总价。(结点从0~N-1,0为根节点即供应商)
AAAAAccepted code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[100007],lv[100007],ans[100007]; 4 vector<int>v[100007]; 5 void dfs(int x){ 6 for(int it=0;it<v[x].size();++it){ 7 lv[v[x][it]]=lv[x]+1; 8 dfs(v[x][it]); 9 } 10 } 11 int main(){ 12 int n; 13 cin>>n; 14 double p,r; 15 cin>>p>>r; 16 int cnt=0; 17 for(int i=0;i<n;++i){ 18 int x,num; 19 cin>>x; 20 if(!x){ 21 cin>>num; 22 a[i]=num; 23 ans[++cnt]=i; 24 } 25 for(int j=1;j<=x;++j){ 26 cin>>num; 27 v[i].push_back(num); 28 } 29 } 30 dfs(0); 31 double sum=0; 32 for(int i=1;i<=cnt;++i){ 33 double tamp=1.0*a[ans[i]]*p*pow(1.0+0.01*r,lv[ans[i]]); 34 sum+=tamp; 35 } 36 printf("%.1lf",sum); 37 return 0; 38 }