python【华为OD机试】最优城市高铁修建方案
【华为OD机试】最优城市高铁修建方案
给定城市数量,可建设高铁的两个城市间的修建成本列表,以及结合城市商业价值会固定建设的两个城市间高铁。 请设计算法,达到修建城市高铁的最低成本,注意,需要满足城市圈内两两互联可达(通过其他城市中转也可以)
输入:
1.第一行,包含此城市圈中城市数量,可建设高铁的两城市间的修建成本列表数量,必建高铁的城市列表。三个数字用空格间隔 2.可建设高铁的两城市间的修建成本列表,为多行输入,格式为3个数字,用空格分割,长度不超过1000 3.固定要修建的高铁城市列表,是上面参数2的子集,可能为多行,每行输入为2个数字,以空格分割 城市id从1开始编号,建设成本的值为正整数,取值范围不会超过1000
输出:
修建城市圈高铁的最低成本,正整数。如果城市圈内存在两城市之间无法互联,返回-1.
样例1:
输入: 3 3 0 1 2 10 1 3 100 2 3 50 输出:60
样例2:
输入: 3 3 1 1 2 10 1 3 100 2 3 50 1 3 输出: 110
python代码
line1 = list(map(int, input().split( ))) city_num = line1[0] option_num = line1[1] must_num = line1[2] optino_line = [] must_line = [] for i in range(option_num): row = list(map(int, input().split( ))) optino_line.append(row) for i in range(must_num): row = list(map(int, input().split( ))) must_line.append(row) print(optino_line) print(must_line) optino_line.sort(key=lambda x: x[2]) total = 0 if must_num == 0: for i in range(option_num-1): total += optino_line[i][2] else: for must in must_line: for option in optino_line: if option[0] == must[0] and option[1] == must[1]: total += option[2] optino_line.remove(option) break for j in range(option_num - 1 - must_num): total += optino_line[j][2] print(total)