题目描述
一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。
规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。
现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。
比如:
收入100元,上交15元;
收入199元(99元不够100),上交15元;
收入200元,上交30元。
输入:
分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]
分销ID范围: 0…65535
收入范围:0…65535,单位元
提示:
输入的数据只存在1个boss,不存在环路
输出:
[boss的ID, 总收入]
输入描述
第一行输入关系的总数量 N
第二行开始,输入关系信息,格式:
分销ID 上级分销ID 收入
比如: 5 1 0 100 2 0 199 3 0 200 4 0 200 5 0 200
输出描述
输出:
boss的ID 总收入
比如: 0 120
备注
给定的输入数据都是合法的,不存在环路,重复的
用例1
输入
5
1 0 100
2 0 199
3 0 200
4 0 200
5 0 200
输出
0 120
def calculate_boss_income(N, relations):
# 分销收入字典
income_dict = {}
# 上级分销ID字典
parent_dict = {}
# 解析输入
for relation in relations:
# 分销id 上级分销id 收入
dist_id, parent_id, income = relation
income_dict[dist_id] = income
parent_dict[dist_id] = parent_id
# 找到BOSS(没有上级分销的分销)
bosses = set(parent_dict.values()) - set(parent_dict.keys())
boss_id = bosses.pop() if bosses else None
# 初始BOSS总收入为0
total_income = 0
def calculate_contribution(dist_id):
nonlocal total_income #非局部变量,因为后续要用到递归
if dist_id in income_dict:
# 获取当前分销的收入
current_income = income_dict[dist_id]
# 计算上交的收入
contribution = (current_income // 100) * 15
# 增加BOSS的总收入
total_income += contribution
# 找到当前分销的上级并进行递归计算
if dist_id in parent_dict:
parent_id = parent_dict[dist_id]
calculate_contribution(parent_id)
# 从所有分销开始递归计算上交收入
for dist_id in income_dict.keys():
calculate_contribution(dist_id)
return [boss_id, total_income]
# 输入数据
N = int(input())
relations = []
for _ in range(N):#存储每行分销关系及信息
line = list(map(int, input().split()))
relations.append(line)
# 计算BOSS的ID和总收入
boss_info = calculate_boss_income(N, relations)
print(boss_info[0],boss_info[1])```