SCOI2011 棘手的操作

2022-05-13 07:12:07 字數 1418 閱讀 3421

有\(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...