點此看題
維護乙個左偏樹和乙個並查集,這道題的關鍵是使用惰性刪除法,然而我講不清楚,直接看**吧(詳細注釋)。
#include
#include
#include
using
namespace std;
const
int m =
300005
;int
read()
struct nodet[2
*m];
struct data
}tmp;
int n,m,cnt,vers[m]
,rt[m]
,la[m]
,top[m]
,siz[m]
,ver[m]
;char s[6]
;/*cnt:左偏樹節點的個數
vers:並查集的版本
ver:並查集上單個點在左偏樹上的版本
la:並查集的修改標記
top:並查集在左偏樹上的根
siz:並查集的大小
*/priority_queue q;
intmerge
(int x,
int y)
//左偏樹的合併
intfind
(int x)
//並查集的根
void
push
(int x,
int v)
//整棵樹做修改
intfake
(int x)
//判斷這個點是否被惰性刪除過,即判斷版本
signed
main()
m=read()
;for
(int i=
1;i<=m;i++)if
(s[0]==
'a'&& s[1]
=='1'
)//單點修改
if(s[0]
=='a'
&& s[1]
=='2'
)//並查集修改
if(s[0]
=='a'
&& s[1]
=='3'
)//全域性修改
if(s[0]
=='f'
&& s[1]
=='1')if
(s[0]==
'f'&& s[1]
=='2')if
(s[0]==
'f'&& s[1]
=='3'
)printf
("%d\n"
,tmp.v+la[0]
);//全域性最值+全域性標記}}
}
SCOI2011 棘手的操作
有 n 個節點,標號從 1 到 n 這 n 個節點一開始相互不連通。第 i 個節點的初始權值為 a i 接下來有如下一些操作 u x y 加一條邊,連線第 x 個節點和第 y 個節點 a1 x v 將第 x 個節點的權值增加 v a2 x v 將第 x 個節點所在的連通塊的所有節點的權值都增加 v ...
SCOI2011 數論 飛鏢
很罕見的不好做的模擬題。情況很多,不容易考慮全面。可以先把問題簡化,然後逐步加深,這樣有利於思考問題。對這道題來說,可以先考慮不打紅心的情況,再考慮打紅心的情況。考慮打紅心又分為 打m,2m,3m,4m的情況,這樣就不容易出錯 做題一定要細心,考慮全面。include includeusing na...
SCOI2011 糖果 題解
洛谷題面 看到很多題解並沒有講清楚這道題為什麼可以用某些方法,套個板子就沒了。蒟蒻就發一篇題解裝x造福大家吧233 做這道題前,我推薦大家做一下一本通中的1352 例4 13 獎金一題,因為有可能做完了這道題對於你們會有一點啟發。題目分析題目對於小朋友的嫉妒一共有 5 中情況,分別如下 如果 x 1...