思路
- 1.感觉还是主要理解题目的意思吧,慢慢看题,不要着急。
- 2.题目中,kj=0表示第j个元素是零售商,然后后面给出的是这个零售商的销售量。
- 3.求出他是第几层然后求和就行了。
我出错的一些点
- 1.树的层数,自下而上也可以看level(第几层),且这道题用father[]省空间
- 2.原来用int,但是输入的类型是double,后面就不会再接受cin的输入了我的天
- 3.直接写setpresion(3)是错误的我的天
代码
#include <iostream>
#include <vector>
#include <math.h>
#include <iomanip>
using namespace std;
int fater[100001];
vector<int> a,b;
int getlever(int n)
{
int i = 0;
while (fater[n] != 0)
{
i++;
n = fater[n];
}
return i + 1;
}
int main()
{
ios::sync_with_stdio(false);
int N; double p, r;
cin >> N >> p >> r;
int K;
for (int i = 0; i < N; i++)
{
cin >> K;
if (K == 0)
{
int mout;
cin >> mout;
a.push_back(i);
b.push_back(mout);
}
else{
int id;
for (int j = 0; j < K; j++)
{
cin >> id;
fater[id] = i;
}
}
}
double sum=0;
for (int i = 0; i < a.size(); i++)
{
sum = sum + b[i] *p* pow(1+r/100, getlever(a[i]));
}
cout <<fixed<<setprecision(1) <<sum << endl;
return 0;
}