Блог пользователя skrydg

Автор skrydg, история, 9 лет назад, По-русски

Надо от вершины v до u найти реберно непересекающийся путь минимального веса.

Веса на ребрах могут быть отрицательными.

Умею делать за m * m. Надо быстрее.

Помогите пожалуйста!

  • Проголосовать: нравится
  • +22
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем skrydg (предыдущая версия, новая версия, сравнить).

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Хм... А ведь это не совсем то же самое, что найти единичный поток минимального веса. Но явно что-то связанное. А как за m*m искать?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Строим новый граф, где вершины это ребра, а ребра вершины ;)

    И там уже просто дфс.

»
9 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

А граф вообще ориентированный или нет?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Да, граф ориентированный

    • »
      »
      »
      9 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Еще один тупой вопрос: откуда берется оценка m2? На мой взгляд, можно все ребра посоединять за n * m: идем по каждой вершине, пусть ее степени a[v] на вход и b[v] на выход. Тогда соединить все ребра, которые входят в вершину, можно за a[v] * b[v]. Сумма всех a[v] не превосходит m, каждое b[v] ограничено сверху n. Итого m * n.

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +15 Проголосовать: не нравится

Задача коммивояжёра, казалось бы, сводится к этой. Пусть все длины рёбер в задаче коммивояжёра от нуля до W. Сделаем из каждого ребра с весом x ребро с отрицательным весом x - nW. Теперь решение задачи из поста является также решением задачи коммивояжёра: из-за добавки  - nW в оптимальном решении, очевидно, будут пройдены все вершины, а сумма исходных весов x будет минимизирована.

UPD: Это сведение неверно. Было бы верно для вершинно-непересекающихся путей. А тут рёберно-непересекающиеся. Тем не менее, задача выглядит для меня как не решаемая за полином... как её решать за m × m?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится -10 Проголосовать: не нравится

    Строим новый граф. Где вершины это ребра. Вершины a и b соединим ребром, если конец а совпадает с началом b(здесь a и b это номера ребер).

    Теперь у нас есть ориентированный граф, где у каждой вершины есть стоимость. Нам нужно найти кратчийшее расстояние от множества вершин, до другого множества(от всех исходящих ребер, до всех входящих), причем тут мы рассматриваем вершинно не пересекающиеся пути. Это делается дейкстрой. С асимптотикой m * m я конечно налажал. (Сверху это уже написали).

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Непонятно как это помогает, стоимости вершин(а значит и веса ребер) могут быть отрицательными.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится -10 Проголосовать: не нравится

        Ребра могут иметь отрицательные веса. Но ведь дейкстра с потенциалами найдет кратчайший путь.

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Это если нет цикла отрицательного веса

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
            Проголосовать: нравится +10 Проголосовать: не нравится

          Дейкстра с потенциалами не ищет вообще ничего, если нет потенциалов.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Кажется, можно свести "longest path problem in directed graph" к этой, просто заменив каждую вершину на две (одна для входа, вторая для выхода). Тогда между вершинно-непересекающимися (в изначальном графе) и реберно-непересекающимися (в графе с удвоенными вершинами) будет биекция.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      И то, и другое похоже на правду. Спасибо!