PTA 7-7 功夫传人 (25分)
用m存储得道者的武功被放大的倍数,没有放大是0
#include <iostream>//类似于树的遍历
#include <cstdio>
#include <map>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
vector<int> v[100000];//数组要足够大,否则会出现段错误
int main()
{
int N;
map<int,int> m;
queue<int> q;
double Z,sum=0;
double r;
cin>>N>>Z>>r;
if(N==0)
{
cout<<'0'<<endl;
return 0;
}
for(int i=0;i<N;i++)
{
int c;
cin>>c;
if(c!=0)
{
for(int j=0;j<c;j++)
{
int num;
cin>>num;
v[i].push_back(num);
}
}
else
{
int num;
cin>>num;
m[i]=num;
}
}
if(m[0]!=0)//祖师爷也可能是得道者。。
{
sum+=Z*m[0];
}
q.push(0);
int level=0;
while(!q.empty())//bfs层次遍历
{
int t=q.size();
level++;
for(int i=0;i<t;i++)
{
int top=q.front();
q.pop();
for(int j=0;j<v[top].size();j++)
{
q.push(v[top][j]);
double temp=Z*m[v[top][j]]*pow(1-r*0.01,level);
sum+=temp;
}
}
}
printf("%d",(int)sum);
return 0;
}