BZOJ3757 蘋果樹(樹上莫隊)

2022-05-14 14:30:08 字數 791 閱讀 8004

點此看題面

大致題意:每次問你樹上兩點之間路徑中有多少種顏色,每次詢問可能會將一種顏色\(a\)看成\(b\)。

這題是一道樹上莫隊板子題。

畢竟求區間中有多少種不同的數是莫隊演算法的經典應用啊。

這操作其實很好處理。

只要判斷\(cnt_a\)和\(cnt_b\)是否同時\(>0\)即可。

但要注意特判\(a==b\)的情況。

#include#define n 50000

#define q 100000

#define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)

#define swap(x,y) (x^=y^=x^=y)

using namespace std;

int n,query_tot,col[n+5];

int ee,lnk[n+5];

struct edge

e[(n<<1)+5];

class class_fio

}q[q+5];

public:

inline void solve()

for(sort(q+1,q+query_tot+1),i=1;i<=query_tot;++i)//處理詢問

for(i=1;i<=query_tot;++i) f.writeln(ans[i]);//輸出答案

}}c;

int main()

BZOJ 3757 蘋果樹 樹上莫隊

題目大意 給定一棵樹,每個節點有乙個顏色,多次求兩個節點的路徑上有多少種不同的顏色 其中還有兩個引數a和b,若蘋果樹上同時有這兩種顏色,ans 傳說中的樹上莫隊 顏色數既不滿足區間加法也不滿足區間減法,直接維護極其困難,這種東西就直接考慮莫隊好了 但是怎麼轉移是個問題 首先樹分塊 然後以左端點所在塊...

bzoj3757 蘋果樹 樹上莫隊

題目大意 給定一棵n nn個節點的樹,每個節點有乙個顏色a ia i ai 有m mm個詢問,每次給出u,v a,b u,v,a,b u,v,a,b,表示u uu到v vv的路徑上,把所有顏色a aa看成顏色b bb,求出有多少種顏色。詢問不會修改節點真實的顏色。n 50000.n 50000.n ...

BZOJ3757 蘋果樹 樹上莫隊

樹上莫隊共有三種寫法 1.按dfs序列分塊,和普通莫隊類似。常數大,不會被卡。2.按塊狀樹的方式分塊。常數小,會被菊花圖卡到o n 3.按 bzoj1086 王室聯邦的方式分塊。常數小,不會被卡。唯一的缺點是較抽象,乙個塊可能是不連通的。權衡一下當然還是寫第三種做法,具體看 然後還有乙個問題,手動模...