OD B卷 - 实现 【BOSS的收入】
题目
- 一个分销公司只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级,分销规定:每个月下级分销需将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级,现给出一组分销关系和每个分销的收入,请找出boss并计算出这boss的收入。
- 比如,收入100元上交15元,收入199仍上交15元;
输入描述:
第一行输入关系的总数量N; 给定的数据都是合法的;
第二行输入关系信息,格式:分销ID 上级分销ID 收入
输出描述:
bossID 总收入
示例1:
输入:
5
1 0 100
2 0 200
3 0 300
4 0 200
5 0 200
输出:
0 150
示例2
输入:
3
1 0 223
2 0 323
3 2 1203
输出:
0 105
解题代码
方案1:
def calc_money(boss_id, relation):result = 0for r in relation:if r[1] == boss_id: # 累加下级上交的result += calc_money(r[0], relation) // 100 * 15elif r[0] == boss_id: # 累加自己的钱result += int(r[2])return result# 关系数
n = int(input().strip())sub_id = set() # 存储下级ID
all_id = set() # 存储所有ID
relation = []
for i in range(n):a, b, money = input().strip().split()sub_id.add(a)all_id.add(a)all_id.add(b)relation.append((a, b, money))
# 差集合,获取boss
boss_id = (all_id - sub_id).pop()
# 递归
boss_money = calc_money(boss_id, relation)
print(boss_id + " " + str(boss_money))
方案2:
n = int(input())
matrix = [[int(x) for x in input().split(" ")] for i in range(n)]
relations = {}matrix.sort(key=lambda x: -x[1])first = matrix[-1][1]for id, up_id, money in matrix:if relations.get(id) is not None:money += relations[id]if relations.get(up_id) is None:relations[up_id] = 0relations[up_id] += money // 100 * 15
print(str(first) + str(relations[first]))