您的位置:首页 > 其它

L2-020 功夫传人 (25分)

2020-11-24 20:46 92 查看

L2-020 功夫传人 (25分)

分析: ⽤⼆维数 组v存储师⻔谱系关系,v[i]表示编号为i的师傅所拥有的徒弟,如果徒弟个数等于0,

也就是说这是个得道者,那么v[i][0]保存放⼤的倍数,⽽且⽤visit[i] = true标记当前的这个编号的⼈是

得道者~⽤深度

优先搜索,每当遇到visit[index] = true也就是说这是个得道者的时候,就累加放⼤后的功⼒,power

* v[index][0],累加到result中~遍历v[index]的所有弟⼦,并将功⼒减弱r%,也就是power * (1 –

r/100),最后输出的是result的整数值(int)result ~~~

// Author : RioTian
// Time : 20/11/24
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
vector<vector<int>> v;
int visit
, n, k;
double result, z, r;
void dfs(int index, double power) {
if (visit[index]) {
result += power * v[index][0];
return;
}
for (int i = 0; i < v[index].size(); ++i) {
dfs(v[index][i], power * (1 - r / 100));
}
}
int main() {
// freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n >> z >> r;
v.resize(n);
for (int i = 0; i < n; ++i) {
cin >> k;
int tmp;
if (k == 0) {
cin >> tmp;
v[i].push_back(tmp);
visit[i] = true;
} else {
for (int j = 0; j < k; ++j) {
cin >> tmp;
v[i].push_back(tmp);
}
}
}
dfs(0, z);
cout << (int)result << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: