有\(n\)個節點,標號從\(1\)到\(n\),這\(n\)個節點一開始相互不連通。第\(i\)個節點的初始權值為\(a_i\),接下來有如下一些操作:
\(u\)
\(x\)
\(y\): 加一條邊,連線第\(x\)個節點和第\(y\)個節點
\(a1\)
\(x\)
\(v\): 將第\(x\)個節點的權值增加\(v\)
\(a2\)
\(x\)
\(v\): 將第\(x\)個節點所在的連通塊的所有節點的權值都增加\(v\)
\(a3\)
\(v\): 將所有節點的權值都增加\(v\)
\(f1\)
\(x\): 輸出第\(x\)個節點當前的權值
\(f2\)
\(x\): 輸出第\(x\)個節點所在的連通塊中,權值最大的節點的權值
\(f3\): 輸出所有節點中,權值最大的節點的權值
一片文章
有合併操作,還有在點上的權值,並查集顯然不能用,考慮可並堆。
u:兩個可並堆並起來
a1:這個點從左偏樹里刪掉,加上權值後再並起來,注意標記的處理
a2:給根打上標記
a3:記個全域性變數加一下
f1:標記下傳後輸出
f2:輸出這個堆頂值
f3:全域性維護個set維護所有堆頂的值,記得更新
一堆細節真是噁心。。hzwer:嘴巴ac真是簡單
const int n=300010;
int n,q,add=0; setmax; mapcnt;
#define lc ch[u][0]
#define rc ch[u][1]
int hp[n],ch[n][2],laz[n],fa[n],dep[n];
inline void erase(int val)
inline void insert(int val)
inline bool get_son(int u)
inline int find(int x)
inline void update(int u,int v)
inline void push_dn(int u)
}int que[n];
inline void pulltag(int u)
int merge(int x,int y) {
if(!x || !y) return x+y;
// cerr<:: iterator it;
read(n);
for(int i=1;i<=n;i++) read(hp[i]),insert(hp[i]);
read(q); int cnt=0;
for(int i=1;i<=q;i++) {
//assert();
// cerr<<"i="《用時:1h
SCOI2011 棘手的操作
點此看題 維護乙個左偏樹和乙個並查集,這道題的關鍵是使用惰性刪除法,然而我講不清楚,直接看 吧 詳細注釋 include include include using namespace std const int m 300005 int read struct nodet 2 m struct d...
SCOI2011 數論 飛鏢
很罕見的不好做的模擬題。情況很多,不容易考慮全面。可以先把問題簡化,然後逐步加深,這樣有利於思考問題。對這道題來說,可以先考慮不打紅心的情況,再考慮打紅心的情況。考慮打紅心又分為 打m,2m,3m,4m的情況,這樣就不容易出錯 做題一定要細心,考慮全面。include includeusing na...
SCOI2011 糖果 題解
洛谷題面 看到很多題解並沒有講清楚這道題為什麼可以用某些方法,套個板子就沒了。蒟蒻就發一篇題解裝x造福大家吧233 做這道題前,我推薦大家做一下一本通中的1352 例4 13 獎金一題,因為有可能做完了這道題對於你們會有一點啟發。題目分析題目對於小朋友的嫉妒一共有 5 中情況,分別如下 如果 x 1...