力扣决定给一个刷题团队发LeetCoin作为奖励。同时,为了监控给大家发了多少LeetCoin,力扣有时候也会进行查询。
该刷题团队的管理模式可以用一棵树表示:
团队只有一个负责人,编号为1。除了该负责人外,每个人有且仅有一个领导(负责人没有领导);
不存在循环管理的情况,如A管理B,B管理C,C管理A。

力扣想进行的操作有以下三种:
给团队的一个成员(也可以是负责人)发一定数量的LeetCoin;
给团队的一个成员(也可以是负责人),以及他/她管理的所有人(即他/她的下属、他/她下属的下属,……),发一定数量的LeetCoin;
查询某一个成员(也可以是负责人),以及他/她管理的所有人被发到的LeetCoin之和。

输入
N表示团队成员的个数(编号为1~N,负责人为1);
leadership是大小为(N - 1) * 2的二维数组,其中每个元素[a, b]代表b是a的下属;
operations是一个长度为Q的二维数组,代表以时间排序的操作,格式如下:
operations[i][0] = 1: 代表第一种操作,operations[i][1]代表成员的编号,operations[i][2]代表LeetCoin的数量;
operations[i][0] = 2: 代表第二种操作,operations[i][1]代表成员的编号,operations[i][2]代表LeetCoin的数量;
operations[i][0] = 3: 代表第三种操作,operations[i][1]代表成员的编号;
输出
返回一个数组,数组里是每次查询的返回值(发LeetCoin的操作不需要任何返回值)。由于发的LeetCoin很多,请把每次查询的结果模1e9+7 (1000000007)。

示例 1:

输入:N = 6, leadership = [[1, 2], [1, 6], [2, 3], [2, 5], [1, 4]], operations = [[1, 1, 500], [2, 2, 50], [3, 1], [2, 6, 15], [3, 1]]
输出:[650, 665]
解释:团队的管理关系见下图。
第一次查询时,每个成员得到的LeetCoin的数量分别为(按编号顺序):500, 50, 50, 0, 50, 0;
第二次查询时,每个成员得到的LeetCoin的数量分别为(按编号顺序):500, 50, 50, 0, 50, 15.

寻常方法
最后一个测试样例过不了

class Node:def __init__(self):self.parent = Noneself.coin = 0self.child = []class Solution(object):def __init__(self):self.g = collections.defaultdict(Node)def updateSingle(self, root, val):while root:root.coin += val   #找到指定结点,更新coin,并从下往上,更新在它之上的所有结点的coinroot = root.parentdef updateAll_2(self, root, val):res = valfor i in root.child:            #用递归的方式,更新该结点和该结点下面所有结点的coinres += self.updateAll_2(i, val)root.coin += resreturn resdef updateAll(self, root, val):res = self.updateAll_2(root,val)#得到指定结点更新后的coinroot = root.parent              #从下往上,更新在它之上的所有结点的coinwhile root:root.coin += resroot = root.parentdef query(self, root):return root.coin % (10**9+7)def bonus(self, n, leadership, operations):for i,j in leadership: #遍历leadership数组,记录结点的父节点和子节点self.g[i].child.append(self.g[j])   self.g[j].parent = self.g[i] res = []for op in operations:if op[0] == 1:     #第一种操作,更新单个结点self.updateSingle(self.g[op[1]],op[2]) elif op[0] == 2:   #第二种操作,更新某个结点和它所有的孩子结点self.updateAll(self.g[op[1]],op[2])else:              #第三种操作,记录每次查询的结果res.append(self.query(self.g[op[1]]))return res

LCP 05 发 LeetCoin相关推荐

  1. freeswitch 发update sip消息_LeetCode LCP 05——发 LeetCoin

    关键字:线段树 归航return:(Trivial)LeetCode 1354--多次求和构造目标数组​zhuanlan.zhihu.com 归航return:(Trivial) LeetCode 8 ...

  2. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  3. 多方位助您快速精准查阅文献和发文章的利器——X-MOL

    全世界只有3.14 % 的人关注了 爆炸吧知识 无论您看文献的习惯是怎样的,X-MOL都有一种为您节省时间的功能: 01 根据参考文献一键直达全文-- X-MOL文献直达 复制文章题录信息(如&quo ...

  4. leetcode题目

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Lee ...

  5. Linux 桌面玩家指南:09. X Window 的奥秘

    Linux 桌面玩家指南:09. X Window 的奥秘 原文:Linux 桌面玩家指南:09. X Window 的奥秘 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 Math ...

  6. LeetCode 2019 力扣杯全国秋季编程大赛

    文章目录 1. 比赛结果 2. 题目解析 2.1 猜数字 Easy 2.2 分式化简 Esay 2.3 机器人大冒险 Medium 2.4 覆盖 Hard 2.5 发 LeetCoin Hard 1. ...

  7. Python监听键盘和鼠标事件,并发送内容至邮箱!

    一. 环境以及工具 环境:win10,Python3.6 工具:JetBrains PyCharm 2018.1.4 二. 使用的第三方库: import os import smtplib #发送邮 ...

  8. 我的世界服务器连接显示不见了,我的世界服务器为什么进去就卡,然后几十秒后显示“连接已丢失”怎么? 爱问知识人...

    2017-10-27 04:06:05 不是网络的问题,可能那个服务器已关闭了,或者崩了的情况. 可能您不知道,服主注册服务器需要花钱,花多少都开不了永久的! ? ? ? ? ? ? ? ? ? ? ...

  9. Linux 桌面玩家指南:16. 使用 CUDA 发挥显卡的计算性能

    Linux 桌面玩家指南:16. 使用 CUDA 发挥显卡的计算性能 原文:Linux 桌面玩家指南:16. 使用 CUDA 发挥显卡的计算性能 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的 ...

最新文章

  1. 用css绘制各种形状
  2. Java学习手记2——多线程
  3. AWS 基础服务学习
  4. 服务器实际显示内存,服务器实际显示内存大小
  5. 使用uicollectionView时需要注意的问题
  6. 栈溢出笔记1.2 覆盖EIP
  7. C#LeetCode刷题之#59-螺旋矩阵 II(Spiral Matrix II)
  8. mysql8.0.12url_使用最新版本MySQL8.0.12报错记录
  9. Python编程一定要注意的那些“坑”(七)
  10. RELYUM—针对关键系统的物联网和网络安全解决方案 (一)
  11. 专硕考数二英二的计算机专业,专硕难度升级!英二改考英一,数二改考数一
  12. 最简单DIY基于ESP32CAM的物联网相机系统③(在JSP服务器图传相片给所有客户端欣赏)
  13. VeLO:让AI自己调整参数的新优化器
  14. gbase 8d客户端功能事项
  15. ad18放置标尺(测量)
  16. 学习记录:python获取链接下载
  17. intellij idea 启动项目时后台tomcat 1099端口被占用
  18. 不可不知的操作系统知识
  19. 读研攻略(10)—三千字总结,要不要读博?
  20. 聊一下三极管截止、放大和饱和3种工作状态

热门文章

  1. 项目管理软件如何选?
  2. java 坦克大战暂停_【 java版坦克大战--事件处理】 坦克动起来了
  3. 乐优商场项目day10—新增商品
  4. 移动端开发input标签调用数字键盘
  5. 【423】COMP9024 Revision
  6. pointcut表达式
  7. Git指令,Git常用命令及详细用法
  8. python django签到系统
  9. 基站天线交叉极化比测量的不确定度评定
  10. 高云FPGA(四):抓信号