您的位置:首页 > 理论基础 > 数据结构算法

L2-020. 功夫传人(数据结构)

2018-01-31 19:00 246 查看
【题目链接】

https://www.patest.cn/contests/gplt/L2-020

题目意思

祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。

解题思路

利用vector存储师徒关系,然后从祖师开始dfs,求出总和。值得注意的是输出用%.0lf会有一组数据过不了,要强制转换LL才过

代码部分

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<set>
using namespace std;
#define INF 0x3f3f3f
#define LL long long
const int maxn=1e5+5;
using namespace std;
vector<int>a[maxn];
double z,r;
int k,b[maxn],n;
double dfs(int x,int t)
{
double s=0;
if (a[x].size()==0)
s+=b[x]*z*pow(1-r/100,t);
else
{
for (int i=0;i<a[x].size();i++)
s+=dfs(a[x][i],t+1);
}
return s;
}
int main()
{
cin>>n>>z>>r;
for (int i=0;i<n;i++)
{
cin>>k;
if (k==0)
cin>>b[i];
else
{
int t;
for (int j=0;j<k;j++)
{
cin>>t;
a[i].push_back(t);
}
}
}
printf("%lld\n",(LL)(dfs(0,0)));
//printf("%.0f\n",dfs(0,0));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: