题目链接:功夫传人
这是一道非常基础的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;
}



京公网安备 11010502036488号