-
gl[i]表示第i个人的功力
td[i]表示编号为i的徒弟们
结构体DD 存放得道的人的编号和倍数
用DD的结构数组dd存放所有得道的人的编号和倍数
用队列求出所有人的功力
在将所有得道的人的功力*倍数 相加 就可以了
代码如下
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int n;
double gl[100001],startGL,r; //gl[i]表示第i个人的功力
vector<int> td[100001]; //td[i]表示编号为i的徒弟们struct DD{ //存放得道的人的编号的倍数
int num;
int bs;
};
vector<DD> dd;void getAllGL();
int main()
{
int k,t;
double ans = 0;
DD d;
cin>>n>>startGL>>r;
gl[0] = startGL;
for(int i=0;i<n;i++){
cin>>k;
if(k==0){
cin>>t;
d.num = i;
d.bs = t;
dd.push_back(d);
}
for(int j=0;j<k;j++){
cin>>t;
td[i].push_back(t);
}
}
getAllGL();
for(int i=0;i<dd.size();i++){
ans += gl[dd[i].num] * dd[i].bs;
}
cout<<int(ans)<<endl;
return 0;
}void getAllGL(){
queue<int> q;
q.push(0);
double glTemp;
while(!q.empty()){
int t = q.front();
q.pop();
glTemp = gl[t];
for(int i=0;i<td[t].size();i++){
gl[td[t][i]] = glTemp * (1-r/100) ;
q.push(td[t][i]);
}
}
}
PATL2_020功夫传人
最新推荐文章于 2024-10-09 18:39:46 发布