L2-020. 功夫传人(STL+深搜)
一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。
这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。
输入格式:
输入在第一行给出3个正整数,分别是:N(<=105)——整个师门的总人数(于是每个人从0到N-1编号,祖师爷的编号为0);Z——祖师爷的功力值(不一定是整数,但起码是正数);r ——每传一代功夫所打的折扣百分比值(不超过100的正数)。接下来有N行,第i行(i=0, ..., N-1)描述编号为i的人所传的徒弟,格式为:
Ki ID[1] ID[2] ... ID[Ki]
其中Ki是徒弟的个数,后面跟的是各位徒弟的编号,数字间以空格间隔。Ki为零表示这是一位得道者,这时后面跟的一个数字表示其武功被放大的倍数。
输出格式:
在一行中输出所有得道者的功力总值,只保留其整数部分。题目保证输入和正确的输出都不超过1010。
输入样例:
10 18.0 1.00 3 2 3 5 1 9 1 4 1 7 0 7 2 6 1 1 8 0 9 0 4 0 3
输出样例:
404
提交代码
这题因为知道最顶头的就是0 然后根据每个人的徒弟下来的进行深搜
需要注意到就是即便是得道中人也要满足说 师傅传给徒弟的就会损失百分之几的道理
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+100;
vector<int>vec[maxn];
int sky[maxn];
double last[maxn];
double sum=0;
int n;
double beg,reduce;
void DFS(int id,int pre)
{for(int i=0;i<vec[id].size();i++){//升天的人不用继续DFS 因为是叶子节点了if(sky[vec[id][i]]!=0){last[vec[id][i]]=last[pre]*sky[vec[id][i]]*(1-reduce*0.01);sum=sum+last[vec[id][i]];//比例}else//不升天的人 要继续DFS{last[vec[id][i]]=last[pre]*(1-reduce*0.01);// printf("%.4lf %lf %lf %d %d\n",1-reduce*0.01,last[vec[id][i]],last[pre],vec[id][i],pre);DFS(vec[id][i],vec[id][i]);}}return;
}
int main()
{scanf("%d %lf %lf",&n,&beg,&reduce);last[0]=beg;//初始值for(int i=0;i<n;i++){int k;int now=0;scanf("%d",&k);if(k==0){int x;scanf("%d",&sky[i]);//只要这个是哪个啥 就是升天的人}//表示的是倍数for(int j=1;j<=k;j++){int b;scanf("%d",&b);vec[i].push_back(b);}}if(n==1){printf("%lld\n",(long long)(beg*sky[0]));return 0;}DFS(0,0);//一个他 一个他师傅printf("%lld\n",(long long)sum);return 0;
}
L2-020. 功夫传人(STL+深搜)相关推荐
- 7-72 功夫传人 (25 分)(深搜)
7-72 功夫传人 (25 分) 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特 ...
- 【L2-020 功夫传人】天梯赛L2系列详解
天梯赛L2-020 功夫传人 题目详情: 思路: 这个题目的看着就感觉需要深搜一下,不妨将样例画出来,思路就突然涌来了.很明显的一道深搜的题目: 题目刚开始输入的一行信息整体的信息:宗门人数,祖师爷功 ...
- hdu4876 深搜+(随机枚举剪枝)
题意: 给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...
- P2668 斗地主 dp+深搜版
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- nyoj-20-吝啬的国度(深搜)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 在一个吝啬的国度里有N个城市.这N个城市间仅仅有N-1条路把这个N个城市连接起来.如今,Tom在第S号城市 ...
- 深搜(DFS)和宽搜(BFS)
相同点: 深搜和宽搜都可以对空间进行遍历,搜索的结构都是树 不同点: 深搜(DFS):(暴搜)(直男)(执着的人) (1)尽可能往深了搜,当搜到叶节点(简称搜到头)就会回溯,然后再搜下一个,然后再回溯 ...
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...
- Poj(2488),按照字典序深搜
题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
最新文章
- Linux驱动程序开发 - 设备IO
- [转]十问 Linux 虚拟内存管理 (glibc)
- mysql 插入数据后返回该条数据id
- stm32 USART_IT_IDLE中断 一帧数据
- php curl 传输大文件,空白目录 · php下载大文件curl · 看云
- 使用POI读取excel文件内容
- C语言 返回指针的函数--指针函数 int* max(int a)
- WordPress页面、文章、分类等的条件判断的标签集合
- meta标签以及一些基本标签
- 安装hexo,建站并新建博客
- 吸引人才的十大顶尖运营机制
- 超多种类的报表模板,填上数据就能用,全拿走!
- 驱动开发——经典图书免费试读下载及勘误讨论
- 成考java_成考本科课程:《Java程序设计》
- 笔记本省电问题分析及其实用小技巧
- 「量化技术」Inv_Strategy 胜率76%的趋势反转策略
- tp6后台管理系统搭建
- 计算机组成原理实验箱教程,计算机组成原理实验箱的技术参数和性能指标
- 如何将网站转化为桌面应用
- python1 到n_怎么用python求1到n所有整数的和