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