洛谷 P4220 WC2018 通道

2022-06-25 07:24:10 字數 2099 閱讀 3391

11328 年, c 國的科學家們研發了一種高速傳送通道,可以在很短的時間內把居民從通道的一端送往另一端,這些通道都是雙向的。

美中不足的是,這種傳送通道需要進行大量的維護和檢修。經過規劃, c 國**決定在 m 城中新建這種通道,在 m 城中,建立了 \(n\) 個傳送站和 \(3*(n-1)\) 條傳送通道,這些傳送通道被分為 \(3\) 組,每一組都包含了 \((n-1)\) 條通道。

當任意一組通道執行時,居民都可以通過這組通道從任意乙個傳送站前往任意的另乙個傳送站。也就是說,所有的傳送站都會被通道所連通。

三組通道按照 \(1\)、 \(2\)、 \(3\) 的順序輪流執行,迴圈反覆。在任意乙個時刻,都有且只有一組傳送通道可以使用。形式化地,在第 \(i\) 天中,有且只有第 \(((i-1)\) mod \(3+1)\) 組通道執行。

c 國著名科學家 access globe 正在進行一項社會調查實驗:調查兩個傳送站之間的傳送通道使用者的資訊。 access globe 的計畫是這樣的:

• 選定兩個傳送站 \(a\)、 \(b\)

• 第一天,他從 \(a\) 出發,使用正在執行的這組通道沿最短路徑到達 \(b\),並調查經過的所有通道上使用者的資訊

• 第二天,他從 \(b\) 出發,使用正在執行的這組通道沿最短路徑到達 \(a\),並調查經過的所有通道上使用者的資訊

• 第三天,他從 \(a\) 出發,使用正在執行的這組通道沿最短路徑到達 \(b\),並調查經過的所有通道上使用者的資訊

access globe 知道每一條傳輸線路在執行時的使用者人數。他希望找出一對 \(a\)、 \(b\),使得在整個實驗過程中所有經過的通道的使用者數量之和最大。

access globe 希望參加 ccf noi 2018 冬令營的你幫他解決這個簡單的小問題。如果你成功地解決了這個問題, access globe 會送你乙份小禮物——\(100\) 分!

\(2 \leq n \leq 10^5,0 \leq w \leq 10^\)

誰說邊分治能幹的點分治幹不了?我點分治一樣過好吧。

先考慮邊分治的做法,我們對第一棵樹邊分治,每次得到兩個聯通塊的時候,對聯通塊黑白染色,考慮不同聯通塊跨越中心邊的貢獻。

設中心邊端點是 \(x,y\) ,對於顏色不同的兩個點 \(u,v\) ,我們有 \(dis_1(u,x)+w(x,y)+dis_1(y,v)+dep_2(u)+dep_2(v)+2dep_2(lca(u,v))+dep_3(u)+dep_3(v)+2dep_3(lca(u,v))\) ,其中 \(dep_x\) 是 \(x\) 到根的權值和,\(w\) 是常數,我們先拿掉,然後考慮對第二棵樹建虛樹,列舉 \(lca\) ,對於第三棵樹,我們可以用dp來求出最值。

假設現在在第二棵樹上列舉到了點 \(p\) ,那麼 \(p\) 不同子樹的 \(lca\) 就是 \(p\) ,我們在第三棵樹上每個點 \(u\) 連向乙個虛點,邊權為 \(dis(u)=dis_1(u,x)+dep_2(u)\) ,考慮在第三棵樹上維護直徑,維護出來顏色不同的兩個點集的直徑 \(f_\) ,然後用不同顏色的 \(f\) 來更新答案,也就是 \(max(f_+f_,f_+f_)+w(x,y)-2dep_3(lca(u,p))\) ,這裡 \(f\) 的加法是合併直徑。

複雜度 \(o(n\log^2 n)\) 。

這題之所以用邊分治是因為我們每次要合併兩個聯通塊,而點分治沒法每次只分出來兩個聯通塊。

那麼我們就規定乙個合併聯通塊的順序,來保證複雜度。

考慮使用合併果子的方法,每次只合併兩個點數最小的聯通塊,如果每次合併和計算的複雜度都是 \(o(size_x+size_y)\) ,那麼複雜度仍然是 \(o(n\log n)\) 。

證明的話,我們對合併過程建哈夫曼樹,乙個點數為 \(s\) 的聯通塊在哈夫曼樹的深度是 \(\log \frac\) ,那麼我們寫出來複雜度:

\[\begint(u)&=\sum_size_v\log n-\sum_size_v\log size_v+\sum_t(v)\\&=size_u\log n-\sum_size_v\log size_v+\sum_t(v)\end

\]我們會發現這樣迭代下去中間的一項會兩兩減掉,那麼就只剩了 \(t(n)=\sum_size_v\log n=n\log n\) 。

由於我寫的**又醜又長,所以我就放剪貼簿了。

邊分治點分治

洛谷P2018 訊息傳遞

巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,...

洛谷P2018 訊息傳遞

由題意得這是一棵樹,而任何乙個已經接到訊息的人,都可以把訊息告訴他的乙個直接上級或者直接下屬,說明是一棵無根樹。本來以為要用什麼高階樹上演算法亂搞,結果發現 n leq 1000 這不是dfs就能水過嗎?實際上是個樹規 欽定乙個結點為根,我們在有根樹上做樹規。對於結點 x 他的狀態由他的子結點決定。...

洛谷P4172 WC2006 水管局長

lct動態維護最小生成樹的典例 這個都是套路,倒序處理,將刪邊變成加邊 再將邊換成點,然後就可以做到點權維護邊權資訊 說一下加邊的過程大概是 一 首先最小生成樹,保證初始最優 二 對於新加入的一條邊,找出原x y鏈上的最大邊,替換 第二點的實現比較有意思 因為是在樹上加邊,所以一定會形成乙個環,那麼...