簡體   English   中英

使用 Q 查詢遍歷圖中的最后一個節點

[英]Last node in graph traversing with Q queries

給定一個有 N 個節點的有向圖(1<=N<=100000),每個節點只有一個出邊,但可以有多個入邊。 有 Q(1<=Q<=10^5) 個查詢,其中每個查詢有 2 種類型。

  1. 在第一個查詢中,我們必須告訴我們是否從節點“A”開始遍歷圖,然后哪個是我們停止的最后一個節點。 如果我們永不停止,則返回 -1。
  2. 第二種查詢是我們可以刪除節點“A”的出邊

我知道我們可以在每個查詢的 O(N) 復雜度中解決這個問題(總體復雜度為 QN ),但是由於查詢的數量很高(10^5),這似乎不是有效的解決方案?

知道如何以更好的時間復雜度解決這個問題嗎? 謝謝

如果您不需要在線回答查詢,最簡單的方法是使用路徑壓縮實現 union-find 並向后處理輸入。 通過鏈接每個永遠不會被刪除的弧來初始化(使用下面的特殊情況)。 向后掃描,對於第二種類型的查詢,添加弧,除非它會創建一個循環,在這種情況下,將尾部鏈接到 id 為 -1 的特殊頂點。 要回答第一種查詢,請使用路徑壓縮找到根。 運行時間將為 O((Q + N) log N)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM