原题链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805388447170560&page=0
注意点:
- 当根供应点就是顾客的情况,测试用例:
1 1.80 1.00
0 3
代码:
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
#define endl '\n'
const int maxN = 1e5 + 10;
int N;
double P, r;
vector<int> receive[maxN];
double price[maxN];
int product[maxN];
int calcCnt;
double ans;
void calc(int x) {
if (product[x] != 0) {
ans += product[x] * price[x];
}
if (calcCnt == N) {
return;
}
for (int i = 0; i < receive[x].size(); i++) {
if (price[receive[x][i]] == 0) {
price[receive[x][i]]=price[x] * (1 + r / 100.00);
calcCnt++;
}
calc(receive[x][i]);
}
return;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N >> P >> r;
price[0] = P;
calcCnt++;
for (int i = 0; i < N; i++) {
int Ki;
cin >> Ki;
//当Ki不为0时
for (int j = 0; j < Ki; j++) {
int tmp;
cin >> tmp;
receive[i].push_back(tmp);
}
//当Ki为0时
if (Ki == 0) {
cin >> product[i];
}
}
calc(0);
cout << fixed << setprecision(1) << ans << endl;
return 0;
}