题意:给出销售链,从出厂商开始向下一级就会涨r%的价格,最后到零售商这问所有零售商的销售额总值为多少
tip:路径压缩
#include<iostream>
#include<cmath>
using namespace std;
int main () {
int n;
double p,r;
cin>>n>>p>>r;
r/=100.;
int s[n]= {0},retail[n]= {0},num[n]= {0},depth[n]= {0};
int c=0;
for(int i=0; i<n; ++i) {
int t,a;
scanf("%d",&t);
if(!t) {
scanf("%d",&a);
if(a) {
retail[c]=i;//剪枝,记录零售商是谁以及存货量
num[c++]=a;
}
} else for(int j=0; j<t; ++j) {
scanf("%d",&a);
s[a]=i;
}
}
double sum=0;
for(int i=0; i<c; ++i) {
double temp=num[i]*p;
int t=retail[i];
int count=0;
while(t) {
if(depth[t]) {//剪枝,否则最后一个测试点过不了
count+=depth[t];
break;
}
count++;
t=s[t];
}
sum+=temp*pow(1+r,count);
t=retail[i];
while(t) {//回代,更新depth
if(depth[t])
break;
depth[t]=count--;
t=s[t];
}
}
printf("%.1lf",sum);
return 0;
}
江楚郎(已婚 发布了298 篇原创文章 · 获赞 15 · 访问量 1万+ 私信 关注