CF1580E Railway Construction


CF1580E Railway Construction

鐵路系統中有 \(n\) 個車站和 \(m\) 條雙向邊,有邊權,無重邊。這些雙向邊使得任意兩個車站互相可達。

你現在要加一些單向邊 \((u,v,w)\)\(w\) 隨便定,代價是 \(a_u\) ,使得從 \(1\) 號車站出發到每個車站都有至少兩條邊不相交的路線,並且最短路不改變。

由於不可控因素,\(a\) 序列會受到 \(q\) 次修改,每次讓 \(a_u \leftarrow a_u+x\) ,並求當前的最小代價。

\(1\le n,m,q \le 3\cdot 10^5,1\le a_i\le 10^9, 1\le x\le 4\cdot 10^8\)

Solution

首先從 \(1\) 出發跑最短路,顯然非最短路邊是無用的。因此建出最短路圖,我們在 DAG 上討論問題。

可以發現,將所有點按照 \(\text{dis}\) 排序是合法的拓撲序,而只要有一個點入度 \(\ge 2\) ,那么它已經滿足要求了。

所以,問題轉化為將所有入度 \(=1\) 的點新連一條邊,那么肯定挑拓撲序在它之前的 \(a\) 最小的點。

因此在拓撲序上維護前綴 \(a\) 最小值和次小值的點即可,暴力復雜度 \(\mathcal O(nq)\)

考慮優化,我們將所有改變前綴最小/次小的位置丟進一個 set 里,顯然二元組 (最小值,次小值) 構成一個個區間。倒着處理詢問(即每次 \(a_u\) 變小):

  • \(u\) 是這個區間的最小值

    可以發現它對區間不會造成任何影響,只對答案產生了影響;求對答案影響的部分,可以用一棵線段樹去維護;

  • \(u\) 是這個區間的次小值

    注意到不同區間的次小值一定不一樣(這個顯然),因此只有撐死 \(1\) 個區間符合該條件,暴力修改即可;

  • \(u\) 既不是這個區間的最小值,也不是次小值

    類比顏色段均攤的思想,它修改的區間端點會從 set 里 erase 掉,同時把它加進 set 里,而 set 里的端點個數總計是 \(\mathcal O(n+q)\) 的,因此直接暴力做即可。

總時間復雜度 \(\mathcal O(m\log m+(n+q)\log n)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM