BZOJ 2054 瘋狂的饅頭

2022-04-30 03:27:07 字數 518 閱讀 8938

【題意】給定n個元素,m次給一段區間染色為i,求最終顏色。

【演算法】並查集

【題解】因為乙個點只受最後一次染色影響,所以倒過來每次將染色區間用並查集合並,父親指向最右邊的點。

細節:1.fa[n+1]=n+1!!!界外點要賦值為自身!!!

2.swap(l,r),涉及雙端點的題都要注意。

#include#include

using

namespace

std;

const

int maxn=1000010

;int

n,m,p,q,fa[maxn],col[maxn];

int find(int x)

intmain()

if(num==n)break

; }

for(int i=1;i<=n;i++)printf("

%d\n

",col[i]);

return0;

}

view code

BZOJ 2054 瘋狂的饅頭

time limit 10 sec memory limit 162 mb submit 449 solved 175 submit status 第一行四個正整數n,m,p,q 一共輸出n行,第i行表示第i個饅頭的最終顏色 如果最終顏色是白色就輸出0 4 3 2 422 30並查集。一看這道題認為...

bzoj 2054 瘋狂的饅頭

想到了要用一種東西維護下乙個沒被染色的是什麼東西,但是沒想到是並查集。這道題就相當於在每乙個集合裡的數都會跳到乙個相同的點,就相當於並查集的代表元素。如果將乙個點染色,就把它的父親設為i 1,這樣並查集的代表元素就是下乙個沒有被染色的點。include include include include...

BZOJ2054瘋狂的饅頭

2054 瘋狂的饅頭 第一行四個正整數n,m,p,q output 一共輸出n行,第i行表示第i個饅頭的最終顏色 如果最終顏色是白色就輸出0 首先考慮資料範圍,區間修改的話用線段樹對於10 7的資料肯定會t掉,所以需要乙個優化的演算法。由於求最後的染色,所以可以用並查集。怎麼用呢。從後往前列舉,如果...