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

Автор ernestvw, история, 5 лет назад, По-английски

Hi. During an algorithm training to prepare the French IOI candidates, we came across a problem, and were wondering about the best complexity to solve it. Here is the statement:

You are given a directed graph with N nodes, that is initially empty. There are M queries that have to be answered online (this is important otherwise the problem is trivial). In each query, an edge is added in the graph, and you have to print whether or not after the edge is added there is a cycle in the graph or not. (Once the first cycle is found, obviously the answer will be yes for all queries after.)

I was hoping that the codeforces community could help us find new and faster solutions to this problem.

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

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

I guess, DSU should be solve the problem. In worst case the algorithm would work in O(nlogn).

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

Do you have any solutions better than $$$O(m)$$$ per query?

We can get $$$O(\frac{n^{2}}{64})$$$ per query by maintaining transitive closure using bitsets, which is not really better.

Also, are you interested in fast per query solution or fast amortized solution?

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

    I am interested in any solution that's faster than O(m^2) and hopefully doable in a contest. Thank you for your help Edit: I hadn't fully read your comment. No, I don't have better than O(m), the intended solution in the training was the one with the bitsets, it was supposed to be an easy problem for the EJOI participants, but we thought there might be some faster solutions.

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

Here is a nice article with $$$O(m^{1/2})$$$ amortized time per edge addition.