# class Point:
# def __init__(self, a=0, b=0):
# self.x = a
# self.y = b
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param N int整型 N
# @param V int整型 V
# @param A int整型一维数组 A
# @param list Point类一维数组 List
# @return int整型
#
class Solution:
def Travel(self , N , V , A , list ):
# write code here
# 构建限制graph
graph = {i+1:[] for i in range(N)}
for point in list:
graph[point.x].append(point.y)
def select_city(graph):
"""
返回旅游顺序城市列表
"""
in_degree = {u: 0 for u in graph.keys()}
for u in graph.keys():
for v in graph[u]:
in_degree[v] += 1
degree_0_dict = {u: A[u-1] for u in graph if in_degree[u]==0}
res = []
while degree_0_dict:
# degree_0按花费小的城市编号小的排序
degree_0 = sorted(degree_0_dict.items(), key=lambda x: (x[1], x[0]))
out = degree_0.pop(0)
degree_0_dict.pop(out[0])
res.append(out)
# 对后置节点的度-1
for v in graph[out[0]]:
in_degree[v] -= 1
if in_degree[v] == 0:
degree_0_dict[v] = A[v-1]
return res
cnt = 0
rest_money = V
res = select_city(graph)
while rest_money > 0 and res:
rest_money -= res[0][1]
cnt += 1
res.pop(0)
return cnt