7-72 功夫传人 (25 分)

一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大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

深搜

思路:
把不是得道者的存进图里,然后遍历一遍,如果是得道者,先把他存到对应师傅的下标的数组里,例如cnt[i] = a; a是得道者的序号,i 就是代表a的师傅的序号,题中是输入每行数的下标。因为并未把得道者存入图中,所以遍历的时候一定不会碰到得道者。所以每遍历到一个人的时候就把他的功力记在dis数组中,每个人保证遍历一遍之后就把他标记,然后遍历完之后,再把得道者的功力加和,此题数据量较大,需要用链式前向星来完成。

#include <iostream>
#include <vector>
#include<cstring>
#include <queue>
using namespace std;
const int N = 1e5 + 10;
double sum = 0;
double z, r;
int t, a;
double dis[N];
int n, m;
int e1[N], ne[N], head[N], idx;
int flag;
int v, e, k;
int vis[N];
queue<int> q;void add(int a, int b)
{e1[idx] = b, ne[idx] = head[a], head[a] = idx ++;
}void dfs(int x) {for (int i = head[x]; i != -1; i = ne[i]) {int j = e1[i];if (!vis[j]) {vis[j] = 1;dis[j] = dis[x] * 0.01 * (100 - r);dfs(j);}}
}double cnt[N], s;
int main() {memset(dis, 0, sizeof(dis));memset(head, -1, sizeof head);cin >> n >> z >> r;for (int i = 0; i < n; i++) {cin >> t;if (t == 0) {cin >> a;cnt[i] = a;} else {while (t--) {cin >> a;add(i, a);}}}dis[0] = z;for (int i = 0; i < n; i++) {dfs(i);}for (int i = 0; i < n; i++) {if (cnt[i] > 0) sum += dis[i] * cnt[i];}printf("%d\n", (int)sum);return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>using namespace std;
vector<int >f[100010];//每个人徒弟
double g[100010];//每个人的功夫值
bool vis[100010];
int kd[100010];
int main()
{int n;double z;double r;int k;while(cin>>n>>z>>r){memset(vis,false,sizeof(vis));memset(g,0,sizeof(g));g[0]=z;for(int i=0;i<n;i++){cin>>k;if(k==0){vis[i]=true;cin>>kd[i];}else{for(int j=0;j<k;j++){int x;cin>>x;f[i].push_back(x);}}}queue<int>q;q.push(0);double sum=0;while(!q.empty()){int t=q.front();q.pop();if(vis[t]){g[t]*=kd[t];sum += g[t];continue;}int s=(int)f[t].size();for(int i=0;i<s;i++){q.push(f[t][i]);g[f[t][i]]=g[t]*(100-r)/100;}}int ans = sum;cout<<ans<<endl;}return 0;
}

7-72 功夫传人 (25 分)(深搜)相关推荐

  1. 【CCCC】L2-020 功夫传人 (25分),,模拟水题,多叉树的存储与遍历

    problem L2-020 功夫传人 (25分) 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代 ...

  2. 7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)

    7-57 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对 ...

  3. L2-020 功夫传人 (25分)(双解法 完整思路+极短代码)

    首先捋一下题,给了一个初始值,然后没传一代就减少一点,如果是得到者就让他获得的功力乘以倍数,最后求得到者功力总和.那么也就是说我们需要找两个东西:1.得到者 2.得到者是第几代. 思路一:建立一个二维 ...

  4. 7-2 列出连通集 (25分)

    文章目录 7-2 列出连通集 (25分) 输入格式: 输出格式: 输入样例: 输出样例: 题解 伪代码 代码 7-2 列出连通集 (25分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别 ...

  5. 7-2 英文单词排序 (25分)

    7-2 英文单词排序 (25分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出.如果长度相同,按照输入的顺序不变. 输入格式: 输入为若干英文单词,每行一个,以#作为输入结束 ...

  6. 7-2 英文单词排序 (25 分)

    7-2 英文单词排序 (25 分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出.如果长度相同,按照输入的顺序不变. 输入格式: 输入为若干英文单词,每行一个,以#作为输入结 ...

  7. 7-2 奥运排行榜 (25分)非排序算法更低时间复杂度

    7-2 奥运排行榜 (25分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的 ...

  8. 7-2 旅游规划 (25分)

    7-2 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  9. 7-2 抢红包(25 分)

    7-2 抢红包(25 分) 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢红包的记录,请你统计一下他们抢红包的收获. 输入格式: 输入第一行给出一个正整数N(≤10​4​​),即参与发红包和 ...

最新文章

  1. PHP 7.0新增特性详解
  2. 易语言录入数据到access里重复提示_一招搞定:excel数据共享协同
  3. BZOJ3566 SHOI2014概率充电器(动态规划+概率期望)
  4. python源码编译 mingw_在windows上用gcc(mingw32)从命令行编译Cython扩展
  5. 图胜千言:电商支付架构设计
  6. SQL必知必会-过滤数据
  7. POJ3067 Japan(归并排序)
  8. Spring : ConfigurableListableBeanFactory
  9. 【线性代数公开课MIT Linear Algebra】 第六课 AX=b与列空间、零空间
  10. 从病毒到“基础软件污染”,Linux 真的安全吗?
  11. 已知分布函数求概率密度例题_助力高考:吃透数学17个必考题型,必定可以考130!(内附解题技巧+例题解析)...
  12. 苹果cms后台登录验证码错误或显示不出来解决方法
  13. 计算机网络最佳路由,计算机网络路由研究分析
  14. Centos 7 | mariadb/mysql | [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
  15. 利用R代码从UCSC XENA下载mRNA, lncRNA, miRNA表达数据并匹配临床信息
  16. 支付宝APP参数SDK转换URL网页链接
  17. Peewee的基本使用
  18. PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)
  19. 详细说明register关键字
  20. springboot毕业设计 基于springboot多用户商城(淘宝京东)系统毕业设计设计与实现参考

热门文章

  1. 渗透测试入门9之域渗透
  2. php从注册列表卸载,MSSQL_彻底删除SQL Server注册表的方法,一般在卸载完数据库时,大家 - phpStudy...
  3. Mybatis的案例和接口代理开发和模板配置
  4. BootstrapTable分页参数
  5. jQuery ajax模板及各参数介绍
  6. 【面向对象设计的5个原则】
  7. 如何判断链表有环、如何判断两个链表相交
  8. 跨浏览器检测某个节点是不是另一个节点的后代
  9. aria-label
  10. C++_new创建的数组作为参数传递