SHOI2008 堵塞的交通traffic

2021-08-14 08:29:51 字數 3030 閱讀 7596

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條道路。小人國的交通狀況非常槽糕。有的時候由於交通堵塞,兩座城市之間的道路會變得不...