将boss看成树根,那么上司与下属的关系就是图论中的有向边,本题本质是一个有向无环图,最终要求的是boss的收入也就是树根的收入,直接建图然后跑一遍dfs,每次用子结点更新父节点即可。
假如u为父节点,v是子节点,那么有val[u]+=val[v]/100*15
c++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
P3103.boss的收入(100分)
题目内容
一个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