給定乙個
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 這一步可以雙指標維護,就不用標記了 暴力遍歷該塊,找到符合要求的邊,加入並查集,同時標記 並查集判聯通...