description
有一天,由於某種穿越現象作用,你來到了傳說中的小人國。小人國的布局非常奇特,整個國家的交通系統可以被看成是乙個2行c列的矩形網格,網格上的每個點代表乙個城市,相鄰的城市之間有一條道路,所以總共有2c個城市和3c-2條道路。 小人國的交通狀況非常槽糕。有的時候由於交通堵塞,兩座城市之間的道路會變得不連通,直到擁堵解決,道路才會恢復暢通。初來咋到的你決心毛遂自薦到交通部某份差事,部長聽說你來自乙個科技高度發達的世界,喜出望外地要求你編寫乙個查詢應答系統,以挽救已經病入膏肓的小人國交通系統。 小人國的交通部將提供一些交通資訊給你,你的任務是根據當前的交通情況回答查詢的問題。交通資訊可以分為以下幾種格式:
close r1 c1 r2 c2:相鄰的兩座城市(r1,c1)和(r2,c2)之間的道路被堵塞了;
open r1 c1 r2 c2:相鄰的兩座城市(r1,c1)和(r2,c2)之間的道路被疏通了;
ask r1 c1 r2 c2:詢問城市(r1,c1)和(r2,c2)是否連通。如果存在一條路徑使得這兩條城市連通,則返回y,否則返回n;
input
第一行只有乙個整數c,表示網格的列數。
接下來若干行,每行為一條交通資訊,以單獨的一行「exit」作為結束。
我們假設在一開始所有的道路都是堵塞的。
我們保證 c小於等於100000,資訊條數小於等於100000。
output
對於每個查詢,輸出乙個「y」或「n」。
sample input
2 open 1 1 1 2
open 1 2 2 2
ask 1 1 2 2
ask 2 1 2 2
exit
sample outputy n
嗯,這題是一道線段樹神題。線段樹要維護一些資訊,維護區間內左上左下,右上右下的連通情況,以及第一行和第二行是否可以向外延伸(共計lu
ru、l
urd、
luld
、ldr
u、ld
rd、r
urd、
road
[0/1
] 8條資訊)。
那麼我們維護這些資訊有什麼用呢?
維護這個資訊是為了區間合併用的。我們先畫個圖(如上圖),我現在要將兩個區間合併。
新的資訊如何維護? lu
1 –>ru
2:lu
1 –>ru
1 +第一行連通+lu
2 –>ru
2 lu
1 –>ru
2:lu
1 –>rd
1 +第二行連通+ld
2 –>ru
2 上面我列舉了lu
1 –>ru
2 的情況,其他的7中情況都有類似的合併方式,我就不一一枚舉了,對這**和圖就能理解。
至於如何判斷連通?同樣對著**和圖理解下即可。
(ps:附上一圖,以便check理解)
SHOI2008 堵塞的交通
有一篇超級棒的線段樹 大力分類討論的題解!戳我 可是我還是不會寫這個做法qwqwqwq 這裡提供線段樹分治的寫法。感覺比較不需要智商,就是跑的有點慢了。include include include include include include include include define max...
SHOI2008 堵塞的交通
這裡提供幾種不用腦子的演算法 當然是離線的 text 記下每條邊的刪除時間,用 text 維護最大生成樹,每次加進一條邊時,跟原來那條鏈上的做比較,刪除那條刪除時間最短的邊即可。線段樹分治 這個演算法將每條邊的加入和刪除時間加入到線段樹中,所以在遍歷到葉子節點時,那個時刻存在的邊都已經在並查集上了,...
SHOI2008 堵塞的交通
有一天,由於某種穿越現象作用,你來到了傳說中的小人國。小人國的布局非常奇特,整個國家的交通系統可 以被看成是乙個2行c列的矩形網格,網格上的每個點代表乙個城市,相鄰的城市之間有一條道路,所以總共有2c個 城市和3c 2條道路。小人國的交通狀況非常槽糕。有的時候由於交通堵塞,兩座城市之間的道路會變得不...