题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805059118809088

题意:给定n个人,编号0~n-1,0为祖先,每个人有一个师傅,每次从师傅传功夫到徒弟时,功力值会削弱r,但可能会出现得道者,功力翻n倍,计算所有得道者功力值之和。

思路:因为计算功力值时要从祖先开始逐渐向下计算,所以我们需要存储每个人的徒弟,然后从上向下遍历即可,我这里用的是邻接表实现的,定义maxn个表头结点head,head[i]其中包括它的第一个徒弟编号nxt,翻的倍数,功力值;定义maxn个表结点,指向其兄弟结点。然后用dfs从祖先编号0开始搜即可,但我被两个细节点卡了一个多小时,卡到崩溃QAQ:1.输入的r是[0,100]的值,还需除100; 2. 我写代码没带脑子,在dfs函数中用全局变量tmp作为指向徒弟的指针,然后程序一直在那运行错误的结果...

AC代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn=;
struct node{
int nxt,bg;
double gl;
}head[maxn]; int n,k,tmp,nxt[maxn];
double z,r,sum; void dfs(int p){
if(head[p].bg)
sum+=head[p].gl*head[p].bg;
else{
int t=head[p].nxt;
while(t){
head[t].gl=head[p].gl*r;
dfs(t);
t=nxt[t];
}
}
} int main(){
scanf("%d%lf%lf",&n,&z,&r);
r=1.0-0.01*r;
head[].gl=z;
for(int i=;i<n;++i){
scanf("%d",&k);
if(!k)
scanf("%d",&head[i].bg);
else
while(k--){
scanf("%d",&tmp);
nxt[tmp]=head[i].nxt;
head[i].nxt=tmp;
}
}
dfs();
printf("%lld\n",(long long)sum);
return ;
}

pta l2-20(功夫传人)的更多相关文章

  1. 天梯赛 L2-020. 功夫传人 BFS

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  2. L2-020. 功夫传人*

    L2-020. 功夫传人 参考博客 #include<vector> #include<cstring> #include<algorithm> using nam ...

  3. L2-020. 功夫传人(dfs+vector 或者 邻接矩阵+dij+优先队列)

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  4. PAT 天梯杯 L2-020 功夫传人

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  5. PAT L2-020 功夫传人【BFS】

    一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹.挖到 ...

  6. PAT L2-020 功夫传人

    https://pintia.cn/problem-sets/994805046380707840/problems/994805059118809088 一门武功能否传承久远并被发扬光大,是要看缘分 ...

  7. 天梯赛 L2-20 功夫传人 (深搜)

    一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹.挖到 ...

  8. 【PAT-L2-020】功夫传人

    链接:https://www.patest.cn/contests/gplt/L2-020 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟 ...

  9. CCCC L2-020. 功夫传人 搜索 bfs && 精度+ 特判

    https://www.patest.cn/contests/gplt/L2-020 题解:给你一颗树,让你遍历一遍,顺便更新一下数据,每次到根节点时将其对应的数据加到ans上面.这里用的bfs. 坑 ...

随机推荐

  1. JavaScript 函数与对象的 简单区别

    直接上例子 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...

  2. Ubuntu系统安装

    一:Ubuntu14.04 安装及使用:[1]制作安装U盘(选择USB-HDD+”并单击后,           一定要点“写入”,注意,“写入”是一个按钮) 以下是详细的连接步骤: https:// ...

  3. JSR303 分組数据验证的使用

    场景:一个Bean ,需要在不同情况下分别做验证 1.依赖:springboot 已经集成 2.定义一个bean (验证对象) import javax.validation.constraints. ...

  4. java abstract构造函数调用

    构造函数是对象的基本,没有构造函数就没有对象.如果在父类中(这里就是你的抽象类)中显示的写了有参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数 public abstract cl ...

  5. Mac 命令行,自定义命令

    例如自定义命令 gotoXFolder, 直接进入XFolder文件夹, XFolder地址为~/abc/def/Xfolder 步骤: 1. 在home文件夹下创建.profile文件 在.prof ...

  6. Tesseract-OCR4.0版本在VS2015上的编译与运行(转)

    最近刚开始接触识别库引擎方面的知识,由于项目中需要使用光学识别处理模块,在老师与朋友的推荐下,我开始接触tesseract光学识别库,在最开始从GitHub上下载的源代码进行编译的时候,出现了许多意想 ...

  7. C# 容器重用避免GC 的论证

    var lst = new List<int>(); lst.Capacity = ; var cnt = lst.Count; var cp = lst.Capacity; ; i< ...

  8. U3D的结构体堆分配栈分配

    ST ot;//分配在栈上 ST[] arrt = new ST[2];//分配在堆上,因为数组是引用

  9. Structs复习 包含外部xml和默认Actiion

    包含外部xml 可以用 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PU ...

  10. 法门扫地僧总结vue面试题(部分来源网络)

    Front-End 前端开发工程师面试宝典!   (本文部分有转载,不定期更新!)             前言(README.md) 本仓库是我整理的前端常见面试题,大部分由我整理,其中个别部分参考 ...