HNOI2016 最小公倍數

2021-07-11 07:47:11 字數 1046 閱讀 4182

給定乙個

n 個點

m條邊的無向圖,每條邊有兩個引數(a

,b) 。

q 個詢問,每個詢問給s,

t,a,

b,求是否存在一條

s 到

t的路徑(是「路徑」而不是「簡單路徑」),使得經過的邊中am

ax=a

,bma

x=b 。n,

q≤50000 m

≤105

a,b≤

109

暴力的想法就是對於每個詢問,只加a≤

qa且b≤q

b 的邊,維護乙個並查集,最後看a,

b 是否聯通,以及聯通塊中a,

b 的最大值是否為qa

,qb 。

我們考慮用分塊優化。對於一條引數為(a

i,bi

) 的邊,它只對a≥

ai的詢問有用。我們將邊按

a 排序,分塊,把每條邊加到整塊都能用到該邊的塊中。詢問我們也將其插入它應在的塊中。然後對於乙個塊,我們將其的詢問和邊按

b從小到大排序,像暴力一樣維護乙個並查集,這裡可以路徑壓縮。但這樣是有漏洞的,因為對於某個

a ,某條邊(a

i,bi

)滿足ai

≤a,但它沒有插入這個塊中,所以我們還要再掃一遍塊內的邊,把滿足條件的邊加入並查集。因為在這裡每次詢問的

a 沒有單調性,所以我們的並查集還要具有回溯功能。

最後,如果把每條邊都加入每個滿足條件的塊中會t的。我們可以只將它插入到第乙個滿足條件的塊中,然後相鄰兩個塊歸併排序。

不妨設分塊大小為

l ,q,

m同階,複雜度為o(

m∗l∗

logn

+m∗m

l∗α(

n)) ,最好的l應為ml

ogm−

−−−√

,最終複雜度為o(

mmlo

gm−−

−−−−

−√) ,但實測沒有o(

mm−−

√log

m)快。

HNOI2016 最小公倍數

這是hnoi2016的day1t1 是一道眾多cj神犇口中的水題,也是ymd 用分塊,莫隊打天下的第一站 這個題只要數學沒有跪爛,應該還是可以看出來,目標是要判定是否存在路徑使x,y聯通,且路上的a的最大值等於a,b的最大值等於b 好我們先考慮暴力怎麼解決 對於前二十分,我們考慮對於每組詢問,只加入...

HNOI2016 最小公倍數

題目 不難發現題意就是,每條邊有兩種權值,每次詢問兩個點 u,v 問 u 到 v 是否存在一條路徑滿足第一類邊權的最大值為 a 第二類邊權的最大值為 b 乙個直觀的暴力做法就是把 a i leq a,b i leq b 的邊都加進來,看看加入這些邊後 u,v 是否聯通 如果聯通,在看看 u,v 所在...

HNOI2016 最小公倍數

分塊,並查集 對邊 a 和詢問 b 分別排序 邊分塊處理,找出當前塊內所有的詢問一起處理 對於每乙個塊的詢問 對於前面塊內的邊,a肯定比當前詢問小,所以按b排序,一條條加入並查集,直到超過詢問的b 這一步可以雙指標維護,就不用標記了 暴力遍歷該塊,找到符合要求的邊,加入並查集,同時標記 並查集判聯通...