JOISC2018 道路建設 LCT

2022-04-29 23:00:14 字數 884 閱讀 1979

loj傳送門

考的時候打的大暴力,其實想到了lct,但是思路有點沒轉過來。就算想到了估計也不能切,我沒有在考場寫lct的自信。。。

其實這題不是讓你直接用lct維護答案,只是借用了lct的架構,讓權值相同的點在同一棵splay中,用一棵splay頂端的點的權值表示這棵splay中所有點的權值。發現從根到某個點的操作跟lct的access操作相似,可以把access操作魔改一下,一邊splay、跳父親,一邊更新樹狀陣列、統計答案。注意為了維護一棵splay的權值,rotate轉到根的時候要更新根的權值。

**非常簡短:

#include #include #include #define r register

#define i inline

#define l long long

#define b 1000000

using namespace std;

const int n = 100003;

char buf[b], *p1, *p2;

i char gc()

i int rd()

l o;

int a[n], c[n], b[n], v[n], n, t;

struct te[n];

i void mdf(int x, int k)

i int qry(int x)

i int nrt(int x)

i void upd(int x)

i void rtt(int x)

i void spl(int x)

upd(x);

}i void acc(int x)

int main()

換windows了,%i64d就懶得改了。

問題 B 道路建設 Ver I

題目描述 有n個村莊,編號從1到n,你應該建造一些道路,使每個村莊都可以相互連線。兩個村a和b是相連的,當且僅當a和b之間有一條道路,或者存在乙個村c使得在a和c之間有一條道路,並且c和b相連。現在一些村莊之間已經有一些道路,你的任務就是修建一些道路,使所有村莊都連通起來,並且所有道路的長度總和是最...

noip2018 鋪設道路

退役oier day1t1見ancestor 一道odt板子題都沒人寫?主要 考場 思路 從小到大解決深度 每次解決乙個深度,貢獻就是與上乙個深度之差乘上區間個數 之後就統統split 暴力列舉深度那裡珂以用hash優化暴列舉的常數,懶得搞 複雜度因為每次split會刪掉乙個點,所以是嚴格nlogn...

道路鋪設 NOIP2018

春春是一名道路工程師,負責鋪設一條長度為 n 的道路。鋪設道路的主要工作是填平下陷的地表。整段道路可以看作是 n 塊首尾相連的區 域,一開始,第 i 塊區域下陷的深度為 di 春春每天可以選擇一段連續區間 l,r 填充這段區間中的每塊區域,讓其下陷深 度減少 1。在選擇區間時,需要保證,區間內的每塊...