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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值