【NOI2018】歸程(kruskal重構樹+最短路+樹上倍增)
總的來說 從v通往1的道路 分為了步行和開車
也就是說 一個點u 他能作為分界點 當且僅當存在一條路徑(u,v)的海拔全部高於當天水位線 且(u,1)是最短路
很顯然 這是一個與瓶頸有關的問題 不難想到Kruskal重構樹
由於瓶頸是海拔 所以我們先建出以海拔為關鍵字的重構樹
由於是個小根堆 所以一個節點 子樹的海拔都大於他 換句話說 v能到達子樹裡的任意一點
所以我們可以預處理出一個子樹裡到1節點的最短路 對於一個查詢 我們在重構樹上倍增跳 直到找到一個點海拔比它深
程式碼可以參考神仙
相關推薦
【NOI2018】歸程(kruskal重構樹+最短路+樹上倍增)
總的來說 從v通往1的道路 分為了步行和開車 也就是說 一個點u 他能作為分界點 當且僅當存在一條路徑(u,v)的海拔全部高於當天水位線 且(u,1)是最短路 很顯然 這是一個與瓶頸有關的問題 不難想到Kruskal重構樹 由於瓶頸是海拔 所以我們先建出以海拔為關鍵字的重構樹 由於是個小根堆 所以一個節點 子
【BZOJ3732】Network(Kruskal重構樹)
發現我還naive的不會Kruskal重構樹 所謂Kruskal重構樹 就是在做Kruskal的時候 構造一顆樹 對兩個即將合併的聯通塊 新建一個節點 作為這兩個聯通塊的父親 且這個節點的權值就是那條相連兩個聯通塊的權值 而且這棵樹很明顯是一個堆 那麼對於最初的最小生成樹 兩個節點路徑上的最大/小值 就是重構
【NOI2018】歸程(克魯斯卡爾重構樹)
復雜度 修改 復雜 print noi truct dfs second getch 【NOI2018】歸程(克魯斯卡爾重構樹) 題面 洛谷 題解 我在現場竟然沒有把這道傻逼題給切掉,身敗名裂。 因為這題就是克魯斯卡爾重構樹的模板題啊 我就直接簡單的說一下把 首先發現答案就
【NOI2018day1】歸程(最短路+kruskal重構樹+並查集+倍增)
Problem 給定一個n(≤2∗105)n(≤2∗105)個節點、m(≤4∗105)m(≤4∗105)條邊的無向連通圖,用l(≤104)l(≤104),a(≤109)a(≤109)描述一條邊的長度、海拔。 給定Q(≤4∗105)Q(≤4∗105)天
NOI2018歸程(Kruskal重構樹)(以及騙分數據結構並查集)
沒有 這一 目標 div 相對 之前 大寫字母 top color 題目描述 本題的故事發生在魔力之都,在這裏我們將為你介紹一些必要的設定。 魔力之都可以抽象成一個 n 個節點、m 條邊的無向連通圖(節點的編號從 1 至 n)。 我們依次用 l,a 描述一條邊的長度、海拔
Kruskal重構樹+Dfs序+ 樹上倍增
描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之間有雙向道路相連,共M條路徑,每條路徑有一個困難值,這個值越大表示越難走,現在有Q組詢問,每組詢問詢問從點v開始只經過困難值小於等於x的路徑所能到達的山峰中第k高的山峰,如果無解輸
【UOJ】【kruskal重構樹】【NOI2018】歸程
按照高度建最大生成樹,構造kruskal重構樹,每次連邊時新建一個節點表示邊權連到兩端的父親上。這樣一棵樹滿足小根堆的性質。所以可以倍增跳到最頂端,然後答案就是子樹裡的最小權值(這裡的權值為到1的最短路)。 程式碼 #include<cstdio&
【BZOJ3551】Peaks加強版(Kruskal重構樹,主席樹)
www top return ostream https zoj 高度 ble lib 【BZOJ3551】Peaks加強版(Kruskal重構樹,主席樹) 題面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之
2018.07.18 [NOI2018]歸程(return)(kruskal重構樹)
傳送門 新鮮出爐的noi2018試題。 下面講講這題的解法: 首先要學習一個叫做kruskal重構樹的東東。 聽名字就知道跟kruskal演算法有關,沒錯,原來的kruskal演算法就是用並查集實現的,但當我們使用kruskal重構樹的時候,對於每次找出
【CF17E】Palisection(回文樹)
fine algorithm sca int ret eve names xtend turn 【CF17E】Palisection(回文樹) 題面 洛谷 題解 題意: 求有重疊部分的回文子串對的數量 所謂正難則反 求出所有不重疊的即可 求出以一個位置結束的回文串的數量 和
【NOI2018】歸程
每一個 temp getch pre clear getc realm 計算 ons 【NOI2018】歸程 題目描述 本題的故事發生在魔力之都,在這裏我們將為你介紹一些必要的設定. 魔力之都可以抽象成一個 >\(1\) 個節點、 \(m\) 條邊的無向連通圖(節
[UOJ#407/LOJ#2865][IOI2018]狼人(Kruskal 重構樹 + 倍增 + 主席樹)
Address BZOJ4899 UOJ#407 LOJ#2865 Solution 先考慮轉化一下問題 詢問四個引數 S
【模板】MST(Kruskal)
程式碼如下 #include <bits/stdc++.h> using namespace std; const int maxv=2e5+10; const int maxe=5e5+10; inline int read(){ int x=0,f=1;char ch; d
UOJ 393 【NOI2018】歸程——可持久化並查集
sed while urn ocr noi pan algo node -- 題目:http://uoj.ac/problem/393 題解:https://www.cnblogs.com/HocRiser/p/9368067.html 但過不了 UOJ 的 hack 數據
【bzoj2151】種樹(堆/優先隊列+雙向鏈表)
getc lin pos return tar ror del 刪掉 位置 題目傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 這道題因為優先隊列不怎麽會用,而且手寫堆的代碼也不長,也想復習一下手寫
【BZOJ2959】長跑(Link-Cut Tree,並查集)
php www main inline body lin maker www. ota 【BZOJ2959】長跑(Link-Cut Tree,並查集) 題面 BZOJ 題解 如果保證不出現環的話 妥妥的\(LCT\)傻逼題 現在可能會出現環 環有什麽影響? 那就可以沿著環把
【BZOJ2555】SubString(後綴自動機,Link-Cut Tree)
cstring 一個 put ostream bzoj2555 subst get ini void 【BZOJ2555】SubString(後綴自動機,Link-Cut Tree) 題面 BZOJ 題解 這題看起來不難 每次要求的就是\(right/endpos\)集合的
【BZOJ1008】越獄(排列組合計數,容斥原理)
code typedef ostream ima bzoj1008 image sca fin space 題意: 思路: 1 #include<cstdio> 2 #include<cstdlib> 3 #include<ios
[SCOI2013]摩托車交易 kruskal重構樹(最大生成樹) 倍增
~~~題面~~~ 題解: 這題想法簡單,,,寫起來真的是失智,找了幾個小時的錯誤結果是inf沒開到LL範圍。。。。 首先我們需要找到任意兩點之間能夠攜帶黃金的上限值,因為是在經過的道路權值中取min,我們要使得這個min值最大,就應該要在最大生成樹上尋找正確的邊。求出最大生成樹後我們需要在上面倍
【bzoj2324】[ZJOI2011]營救皮卡丘 最短路-Floyd+有上下界費用流
之前 %d push 間距 出發 防禦 using mil 之間 原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 題目描述 皮卡丘被火箭隊用邪惡的計謀搶走了!這三個壞家夥還給小智留下了赤果果的挑釁!為了皮卡丘,也為