Кругосветка

Submit solution

Points: 100 (partial)
Time limit: 1.0s
Memory limit: 62M

Author:
Problem type
Allowed languages
C, C++, Python

Ёжик Антон решил отправиться в путешествие по N городам. Но забыл заранее составить план поездки, из-за чего сильно боиться лишних трат, так как чтобы доехать из города \(N_i\) в город \(N_j\) требуется K топлива на каждый километр расстояния между городами. Помогите Антону добраться из 1 города в N-ый город с минимальным количеством затрат.

Описание входных данных

Программа получает на вход целое положительное число N \((1 ≤ N ≤ 10^3)\). Дальше, на следующих N строках идут четыре целых положительных числа: город \(N_i\), \(N_j\) \((1 ≤ N_i, N_j ≤ 10^3)\), расстояние между ними и количества топлива, требуемого на каждый километр расстояния

Описание выходных данных

Программа должна вывести суммарные затраты ёжика на путь из города 1 в город N

Входные данные

7
1 2 5 10
2 3 10 5
3 6 2 9
6 7 7 12
1 4 7 11
4 5 13 3
5 6 10 7

Выхоные данные

202

Примечание

Решение, правильно работающие на числах не превышающие 100, будет оцениваться в 60 баллов.


Comments


  • 0
    dashleb  March 12, 2025, 3:10 a.m.

    import heapq

    def minimal_fuel_cost():

    # Чтение входных данных
    N = int(input())  # Количество городов
    graph = {i: [] for i in range(1, N + 1)}  # Словарь для хранения графа
    
    # Заполнение графа
    for _ in range(N):
        city1, city2, distance, fuel_per_km = map(int, input().split())
        cost = distance * fuel_per_km  # Вычисляем стоимость проезда
        graph[city1].append((city2, cost))
        graph[city2].append((city1, cost))  # Если дороги двунаправленные
    
    # Алгоритм Дейкстры
    start_city = 1
    end_city = N
    distances = {city: float('inf') for city in graph}
    distances[start_city] = 0
    priority_queue = [(0, start_city)]  # Очередь с приоритетом (расстояние, город)
    
    while priority_queue:
        current_cost, current_city = heapq.heappop(priority_queue)
    
        # Если текущая стоимость больше уже найденной, пропускаем
        if current_cost > distances[current_city]:
            continue
    
        # Обновляем расстояния до соседних городов
        for neighbor, cost in graph[current_city]:
            new_cost = current_cost + cost
            if new_cost < distances[neighbor]:
                distances[neighbor] = new_cost
                heapq.heappush(priority_queue, (new_cost, neighbor))
    
    # Выводим минимальные затраты
    print(distances[end_city])

    Пример использования

    if __name__ == "__main__": minimal_fuel_cost()