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

Автор The_dreamer_, история, 3 года назад, По-английски

Please help me with this problem: Given an undirected weighted graph have n vertices and m edges (n <= 1000, m <= 10000). How to check if there exists a simple cycle have total weight >= 0. Thanks for your help.

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

»
3 года назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится

You can multiply each edge weight by $$$-1$$$. Then use Bellman Ford's algorithm to find a negative cycle which iirc works in $$$O(n^2 + n \cdot m)$$$.

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

    But as far as I know, it can only be used for directed graph. When use it in undirected graph, this algorithm can go on a loop in a negative weighted edge (cycle of length 2) but it not simple cycle.

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

      Not sure. There's another approach you can try. It has an $$$O(m^2)$$$ complexity so not sure if it will pass. For eaxh edge from node $$$a$$$ to node $$$b$$$ with weight $$$w$$$, "remove" that edge, then find the shortest distance between $$$a$$$ and $$$b$$$ (assuming there is indeed a path between these after removing the edge). Let the distance found be $$$p$$$. You have a cycle with weight $$$p+w$$$.

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

Can someone help me please. I still can't solve this problem.

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

problem link??

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

I think you can use Bellman Ford's algorithm but with vertices {vertex, last edge}, and then you update distance only if new edge is not equal to the last edge used. I think it will still be O(m^2) because every edge creates only 2 new vertices.