1
+ class Sell :
2
+ def __init__ (self , enroll , referral , seller , amount ):
3
+ self .answer = [0 ] * len (enroll )
4
+ self .referral = referral
5
+ self .enroll_idx = {val : idx for idx , val in enumerate (enroll )}
6
+ for cur_seller , cur_amount in zip (seller , amount ):
7
+ self .dfs (cur_seller , cur_amount * 100 )
8
+ def dfs (self , cur_seller , cur_amount ):
9
+ if cur_amount < 1 or cur_seller == '-' :
10
+ return
11
+ cur_idx = self .enroll_idx [cur_seller ]
12
+ self .answer [cur_idx ] += cur_amount - int (cur_amount * 0.1 )
13
+ self .dfs (self .referral [cur_idx ], int (cur_amount * 0.1 ))
14
+
1
15
def solution (enroll , referral , seller , amount ):
2
- loc_data = {node : idx for idx , node in enumerate (enroll )}
3
- result = [0 ] * len (enroll )
4
-
5
- root_list = []
6
- for leaf in seller :
7
- tmp = [leaf ]
8
- cur_idx = loc_data [leaf ]
9
- while referral [cur_idx ] != '-' :
10
- tmp .append (referral [cur_idx ])
11
- cur_idx = loc_data [referral [cur_idx ]]
12
- tmp .append ('center' )
13
- root_list .append (tmp )
14
-
15
- for idx , price in enumerate (amount ):
16
- price *= 100
17
- cur_root = root_list [idx ]
18
- for node in cur_root [:- 1 ]:
19
- price_10 = int (price * 0.1 )
20
- result [loc_data [node ]] += price - price_10
21
- if price_10 < 1 :
22
- break
23
- price = price_10
24
- return result
25
-
26
-
16
+ sell = Sell (enroll , referral , seller , amount )
17
+ return sell .answer
0 commit comments