Задача с IOI'99

Тема в разделе "WASM.A&O", создана пользователем jones, 26 мар 2009.

  1. jones

    jones New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2009
    Сообщения:
    3
    Помогите с задачкой,не могу въехать
    Условие

    Дорожное движение в городе Дингилвилле устроено необычным образом. В городе есть перекрестки и дороги, которыми перекрестки связаны между собой. Любые два перекрестка могут быть связаны не более чем одной дорогой. Не существует дорог, соединяющих один и тот же перекресток с самим собой. Время проезда по дороге в обоих направлениях одинаково. На каждом перекрестке находится один светофор, который в каждый момент времени может быть либо голубым, либо красным. Цвет каждого светофора изменяется периодически : в течение некоторого интервала времени он голубой, а затем, в течение некоторого другого интервала - красный. Движение по дороге между любыми двумя перекрестками разрешено тогда и только тогда, когда светофоры на обоих перекрестках этой дороги имеют од ин и тот же цвет в момент въезда на эту дорогу. Если транспортное средство прибывает на перекресток в момент переключения светофора, то его поведение будет определяться новым светом светофора. Транспортные средства могут находиться в состоянии ожидания на перекрестках. У Вас есть карта города, которая показывает:

    · время прохождения каждой дороги (целые числа).

    · длительность горения каждого цвета для каждого светофора (целые числа).

    · начальный цвет и оставшееся время горения этого цвета (целые числа) для каждого светофора.

    Вы должны определить путь между двумя заданными перекрестками, позволяющий транспортному средству проехать от начального перекрестка к конечному за мимнимальное время с момента старта. Если существуют несколько таких путей, то Вы должны вывести только один из них.


    Ограничения

    · 2≤N≤300, где N - количество перекрёстков. Перекрёстки нумеруются целыми числами от 1 до N.

    · 1≤M≤14 000, где M - количество дорог.

    · 1≤Lij≤100, где Lij - время, необходимое для перемещения от перекрёстка i до перекрёстка j, используя дорогу, которая соединяет перекрёстки i и j.

    · 1≤tiB, tiP≤100, где tiB и tiP - длительность горения красного и голубого цвета соответственно на перекрёстке i.

    · 1≤riС ≤tiС, где tiС - оставшееся время свечения начального цвета С (C принадлежит {P, B}) на перекрёстке i.
    Входные данные

    Входные данные задаются в файле lights.inp.

    · Первая строка содержит два числа: номер начального и номер конечного перекрёстка.

    · Вторая строка содержит два числа: N и M.

    · Следующие N строк содержат информацию об N перекрёстках. (i+2)-ая строка входного файла содержит информацию о перекрёстке i: Ci, riС, tiB, tiP, где Ci ('B' или 'P' - большие латинские буквы) - начальный свет светофора на перекрёстке i.

    · Следующие M строк описывают M дорог. Каждая строка имеет вид: i,j, Lij, где i и j - номера перекрёстков, которые связывает эта дорога.


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

    Выходные данные записываются в файл lights.out.

    Если путь существует:

    · Первая строка должна содержать минимальное время, необходимое для достижения конечного перекрёстка из начального.

    · Вторая строка должна содержать список перекрёстков, который соответствует найденному минимальному пути. Перекрёстки должны быть записаны в порядке их посещения. Первое целое должно быть номером начального перекрёстка, последнее - конечного.

    Если путь не существует:

    · Единственная строка должна содержать только целое число 0.


    Пример входных данных



    1 4

    4 5

    B 2 16 99

    P 6 32 13

    P 2 87 4

    P 38 96 49

    1 2 4

    1 3 40

    2 3 75

    2 4 76

    3 4 77


    Пример выходных данных

    127

    1 2 4
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Наверное, только полным перебором.
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    jones
    Здесь вполне можно использовать алгоритм Дейксты, зная минимальное время, когда мы можем попасть в некоторую вершину, считаем сколько времени нужно ждать чтобы проехать по некоторой дороге, прибавляем время в дороге, и смотрим получилось у нас попасть в соседнюю вершину быстрее или нет. В общем самое интересное тут это функция, которая для двух светофоров и некоторого начального момента, скажет когда в ближайшем времени светофоры будут в одинаковом состоянии.
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Эм... да... можно... чё-то решил, что временная зависимость длины ребра графа, будет для Дейкстры проблемой...
    P.S. Точнее временная зависимость и была бы проблемой, если бы она была произвольной.
     
  5. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
  6. jones

    jones New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2009
    Сообщения:
    3
    Black_mirror,я что-то не понимаю,что интересного в функции, которая для двух светофоров и некоторого начального момента, скажет когда в ближайшем времени светофоры будут в одинаковом состоянии.