题目链接:功夫传人
这是一道非常基础的dfs题,从祖师爷到得到者;题目中给出了祖师爷是i = 0,就从0开始往下深搜,并且把功力值进行减弱,得到者没有徒弟,把得到者标记一下,如果遇到得到者就终止dfs,功力值放大一定的倍数。
#include<iostream>
#include<vector>
using namespace std;
const int N = 1e5 + 10;
int n,k,x;
double z,r;
vector<int > stu[N];
double ans;
bool st[N];
void dfs(int u,double sum){
if(st[u]){
ans += sum * stu[u][0];
return ;
}
for(int i = 0; i < stu[u].size(); i ++ ){
dfs(stu[u][i],sum * (1 - r /100));
}
}
int main() {
scanf("%d %lf %lf",&n,&z,&r);
for(int i = 0; i < n; i ++ ) {
cin >> k;
if(k == 0) {
st[i] = true;
cin >> x;
stu[i].push_back(x);
} else {
while(k -- ) {
cin >> x;
stu[i].push_back(x);
}
}
}
dfs(0,z);
cout<<(int)ans;
return 0;
}
该博客介绍了一道基础的深度优先搜索(DFS)问题,涉及到功力值在武术传承中的减弱和放大。题目中,从祖师爷开始,通过DFS遍历徒弟,递归计算每个弟子的功力值,最终得到得到者的功力。程序使用C++实现,通过DFS遍历徒弟并调整功力值,最后输出得到者的总功力值。
867

被折叠的 条评论
为什么被折叠?



