BZOJ 世界樹
第一步首先建虛樹
第二步兩遍dfs,一次從葉子到根,一次從根到葉子,就可以得到虛樹中每個節點在M個詢問點中離他最近的是哪個(簡稱為控制點)
第三步考慮計算答案,對於整個樹,我們把節點化為三個種類
1.節點在虛樹的葉子節點的子樹中
2.節點在虛樹根節點之上的部分
3.節點在虛樹兩個節點之間
對於第一和第二種節點,我們很好統計答案的貢獻分別為當前節點子樹的大小和總節點的個數減去當前節點子樹大小
而對於第三種,假設虛樹上每對相鄰節點深度小的為U,深度大的為V.
如果U的控制點和V的控制點相同,那麼顯然U與V之間的部分只對一個答案有貢獻,該答案即為U與V的控制點.
如果U的控制點與V的控制點不同,假設U的控制點為I,V的控制點為J.那麼他們肯定是I->U->V->J這樣的深度遞增序
如果dis(U,V)+dis(V,J)>(dis(I,U)+dis(U,V)+dis(V,J))/2>dis(V,J) 那麼U與V之間的部分就會被分為兩個部分
利用倍增從V開始跳(dis(I,U)+dis(U,V)-dis(V,J))/2找到分界點分別統計貢獻.
相關推薦
BZOJ 世界樹
第一步首先建虛樹 第二步兩遍dfs,一次從葉子到根,一次從根到葉子,就可以得到虛樹中每個節點在M個詢問點中離他最近的是哪個(簡稱為控制點) 第三步考慮計算答案,對於整個樹,我們把節點化為三個種類 1.節點在虛樹的葉子節點的子樹中 2.節點在虛樹根節點之上的部分 3.節點在虛樹兩個節點之間
bzoj 3572: [Hnoi2014]世界樹
png 樹結構 多少 方式 alt [0 truct int 藍色 Description 世界樹是一棵無比巨大的樹,它伸出的枝幹構成了整個世界。在這裏,生存著各種各樣的種族和生靈,他們共同信奉著絕對公正公平的女神艾莉森,在他們的信條裏,公平是使世界樹能夠生生不息、持續運
[BZOJ 3306]樹(dfs序+線段樹+倍增)
最小 get == 支持 如果 space amp ring zoj Description 給定一棵大小為 n 的有根點權樹,支持以下操作: • 換根 • 修改點權 • 查詢子樹最小值 Solution 單點修改子樹查詢
Bzoj3572 [Hnoi2014]世界樹
content color get open 生活 num 兩個 input string Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1713 Solved: 923 Description 世界樹是一棵
bzoj 1907: 樹的路徑覆蓋【貪心+樹形dp】
string cpp print names pos else ++ () post 我是在在做網絡流最小路徑覆蓋的時候找到這道題的 然後發現是個貪心+樹形dp \( f[i] \)表示在\( i \)為根的子樹中最少有幾條鏈,\( v[i] \) 表示在\( i \)為根
[BZOJ3572][HNOI2014]世界樹(虛樹DP)
iostream ash char ios swa break sort 之前 題目 代碼用時1:15 思想比較簡單的虛樹DP,但細節巨茍,大部分代碼都是LCA/DP/虛樹模板,真正需要自己寫的其實並不多。 寫之前要有一個清晰的思路和框架,細節要有一個比較清楚的認識,不能依
[HNOI 2014]世界樹
答案 bool hnoi get math std 編號 markdown 就是 Description 題庫鏈接 給出一棵 \(n\) 個節點的樹, \(q\) 次詢問,每次給出 \(k\) 個關鍵點。樹上所有的點會被最靠近的關鍵點管轄,若距離相等則選編號最小的那個。求每
BZOJ.3257.樹的難題(樹形DP)
cstring log clas pan main efi read logs .com 題目鏈接 狀態只與黑、白兩點的顏色有關,於是用 \(f[x][i][j]\)表示當前以x為根節點,有\(i\)個黑點\(j\)個白點,使得x子樹滿足該條件的最小花費。 最後答案就是 \
【題解】HNOI2014世界樹
清醒 space 小時 swa print bsp min 節點 建立 腦子不清醒的時候千萬別寫題。寫題寫不下去了千萬別死扛,重構才是你唯一的出路QAQ 昨天很想快點寫道題,思路沒有很清晰的時候就寫了,結果……今天一怒之下決定重整思路重
JZOJ5776. 【NOIP2008模擬】小x遊世界樹
ref alt zoj style return ++i col oid void 題目:【NOIP2008模擬】小x遊世界樹; 題目的附加題解給的很清楚,這裏只給一個代碼; 1 #include<iostream> 2 #include<cst
[JZOJ5776]【NOIP2008模擬】小x遊世界樹
+= 不一定 truct 一行 自己 平臺 更新 return print Description 小x得到了一個(不可靠的)小道消息,傳說中的神島阿瓦隆在格陵蘭海的某處,據說那裏埋藏著亞瑟王的寶藏,這引起了小x的好奇,但當他想前往阿瓦隆時發現那裏只
bzoj 1036 樹的統計Count (樹鏈剖分+線段樹)
char edge sizeof 節點 dfs 維護 printf tdi get 題目大意:給你一棵樹,每個點都有點權 有3種操作,修改某節點的權值,求樹鏈上節點的權值的最大值,求樹鏈上節點的權值和 樹剖裸題,搜一個樹鏈剖分序,用線段樹維護一下即可,總時間 1 #i
BZOJ 1907 樹的路徑覆蓋【樹形DP】
好像可以貪心? f [ i ]
洛谷3233 BZOJ3572 HNOI2014 世界樹 虛樹 樹形dp
題目連結 題意: 給你一棵n個點的樹,邊的邊權都是1,有m次詢問,每次選出若干個點,對於每次詢問,每個點要劃分給離它最近的被選出來的點,如果有多個距離相同的點,則把這個點劃分給這幾個距離相同的點中編號最小的點,求每次詢問選出的這些點各自分得了多少個點。
[BZOJ 3306] 樹
i++ urn pri father ret lse 解決 php %s [題目鏈接] https://www.lydsy.com/JudgeOnline/problem.php?id=3306 [算法] 若沒有換根操作 , 那麽“查詢子
Luogu3233 HNOI2014 世界樹 虛樹
傳送門 $\sum m \leq 300000$,老套路建虛樹進行$DP$ 建好虛樹後,先用兩次$DFS$計算到達所有虛點最近的重要點$be_i$ 注意這兩次$DFS$的作用:第一次是考慮兒子影響父親,第二次是考慮父親影響兒子,所以兩次$DFS$的更新和遞迴之間的順序需要搞清楚 然後考慮每一個虛點
[BZOJ 3306]樹
題目描述 給定一棵大小為 nn 的有根點權樹,支援以下操作: • 換根 • 修改點權 • 查詢子樹最小值 輸入輸出格式 輸入格式 第一行兩個整數 n,Qn,Q ,分別表示樹的大小和運算元。 接下來nn行,每行兩個整數f,vf,v
nssl1163-小x遊世界樹【樹形dp,二次掃描和換根法】
正題 題目大意 一棵樹,一條邊的權是原本的權值減去出發點的加速。 求一個點使得這個點到所有點路徑邊權和最小。 解題思路 我們先求出以1為根時的答案 然後用換根法 我們從1轉移到2,我們會發現 紅
2018年9月24日提高組模擬賽 T2 小x遊世界樹
大意 給定一棵樹,求出從哪個點跑最短路使得最短路徑的和最小 思路 二次掃描換根法 先用一遍dfsdfsdfs求出一個點的最短路,然後考慮換根帶來的最短路影響 以樣例為例,假設我們現在要從1換根到2
【二次掃描換根法】JZOJ_5776 小x遊世界樹
題意 一棵有NNN個節點的樹,上面每個點都有一個魔法陣,走到了這個點上會被魔法陣傳送回根節點,每個魔法陣只能用一次,且每個節點上有一個加速平臺,可以使以這個點為起點的邊需要的體力值減小。求以哪個節點為根