ZJOI2019 語言 解題報告

2022-04-29 20:42:10 字數 1921 閱讀 7636

3個\(\log\)做法比較簡單,但是寫起來還是有點麻煩的。

大概就是樹剖把鏈劃分為\(\log\)段,然後任意兩段可以組成乙個矩形,就是個矩形面積並,聽說卡卡就過去了。

好像這個可以被優化到兩個\(\log\),算了,估計挺麻煩的。

乙個\(\log\)的做法看起來還挺厲害的。

考慮欽定某個點算它的貢獻,於是我們要算的是所有經過它的鏈的並的大小。

但是染色這個東西看起來就很不可搞,我們可以挖掘一下這個並的簡單性質。

注意到,這個並是聯通的,可以看做是乙個生成子樹,然後我們需要求這個子樹的大小。

考慮乙個類似建虛樹的過程,我們把\(n\)個鏈拆成\(2n-1\)條鏈,即按\(dfs\)序進行排序,相鄰兩點構成鏈,我們按\(dfs\)序新加入乙個點\(x\)時,新的鏈的貢獻就是\(dep_x-dep_\),\(y\)是上乙個加入的點,這個可以畫圖體會一下。

但是乙個乙個加還是不太好維護,考慮我們可不可以合併兩個子樹的集合,顯然,貢獻和左邊的最右端\(x\)以及右邊的最左端\(y\)有關

然後我們發現需要討論\(x,y\)是否在同一條鏈上,不在就很簡單,兩棵樹沒有交,隨便算算就可以了。

如果在的話,我們發現有一部分是重疊的,算出這部分重疊可能需要求出左邊的最淺點,為了方便,我們欽定每個集合的最淺點都是根(並加入根),然後在合併的時候可以發現,只需要減去\(dep_\)就可以了,這對上面不在同一條鏈上仍然是適用的。

在合併到最後為了去掉根的貢獻,我們維護乙個點集的\(lca\)的深度,最後減去它就可以了。

這樣的話,我們就可以用線段樹維護這個子樹的大小,並支援單點修改與查詢。

對於鏈的修改,我們可以打差分tag,在相應的節點的線段樹中加入與刪除鏈的兩個端點\(s,t\)。

可以發現,為了繼承兒子的資訊,還需要乙個線段樹合併。

code:

#include #include #include #include #define ll long long

const int size=1<<21;

char ibuf[size],*is,*it;

#define gc() (is==it?(it=(is=ibuf)+fread(ibuf,1,size,stdin),is==it?eof:*is++):*is++)

template void read(t &x)

const int n=1e5+10;

int head[n],to[n<<1],next[n<<1],cnt;

void add(int u,int v)

int n,m;

ll ans;

int dfn[n],ha[n],st[n<<1][20],log[n<<1],fir[n],dep[n],par[n],dfsclock,dcnt;

void dfs(int now,int fa)

}int lca(int x,int y)

void ins(int &now,int l,int r,int p,int d)

int mid=l+r>>1;

if(p<=mid) ins(ls,l,mid,p,d);

else ins(rs,mid+1,r,p,d);

updata(now);

}int merge(int now,int las,int l,int r)

int mid=l+r>>1;

ls=merge(ls,ch[las][0],l,mid);

rs=merge(rs,ch[las][1],mid+1,r);

updata(now);

return now;

}void dfs(int now)

for(int i=0;i>1]+1;

for(int j=1;j<=18;j++)

2019.5.9

ZJOI2019 線段樹 解題報告

聽說有人噴這個題簡單,然後我就跑去做,然後自閉感 rp 霧 理性分析一波,可以發現最後形成的 2 k 個線段樹,對應的操作的乙個子集,按時間順序作用到這顆線段樹上。首先考慮研究一下tag的性質,比如兩個操作時間先後是否沒有影響,操作是否可以以某種形式進行合併,然後啥也沒發現。然後考慮一下一顆樹是否可...

ZJOI2019賽季回顧

zjoi2019落下了帷幕 儘管成績不盡如人意 但是明天還會繼續 正如一句話所說 不要害怕落日的黑暗,因為明天的太陽還會照常公升起 總排rank35,僅以此文章回顧整個賽季 不算很難的題,大家都ak了,也沒什麼好說的 day2t1很傻的乙個地方判錯了,丟分,然後剩下兩個暴力,總分194 day2t3...

ZJOI2019一輪遊記

期待已久的省選終於開始了233,關於之前的一些內容,在zjoi2019一輪停課刷題記錄都可以找到,這裡不再贅述 zjoi2019,bless all 今天難得有休息,昨晚修仙到挺晚的,但早上還是起的很早的說 下了個艦b玩玩感覺不錯,挺喜歡的,然後又是雀魂 現在銀間能上分但銅間就狂掉233 下午和cx...