BZOJ2049 SDOI2008 洞穴勘測

2021-08-19 03:40:09 字數 2503 閱讀 9997

description

輝輝熱衷於洞穴勘測。某天,他按照地圖來到了一片被標記為jszx的洞穴群地區。經過初步勘測,輝輝發現這片區域由n個洞穴(分別編號為1到n)以及若干通道組成,並且每條通道連線了恰好兩個洞穴。假如兩個洞穴可以通過一條或者多條通道按一定順序連線起來,那麼這兩個洞穴就是連通的,按順序連線在一起的這些通道則被稱之為這兩個洞穴之間的一條路徑。洞穴都十分堅固無法破壞,然而通道不太穩定,時常因為外界影響而發生改變,比如,根據有關儀器的監測結果,123號洞穴和127號洞穴之間有時會出現一條通道,有時這條通道又會因為某種稀奇古怪的原因被毀。輝輝有一台監測儀器可以實時將通道的每一次改變狀況在輝輝手邊的終端機上顯示:如果監測到洞穴u和洞穴v之間出現了一條通道,終端機上會顯示一條指令 connect u v 如果監測到洞穴u和洞穴v之間的通道被毀,終端機上會顯示一條指令 destroy u v 經過長期的艱苦卓絕的手工推算,輝輝發現乙個奇怪的現象:無論通道怎麼改變,任意時刻任意兩個洞穴之間至多只有一條路徑。因而,輝輝堅信這是由於某種本質規律的支配導致的。因而,輝輝更加夜以繼日地堅守在終端機之前,試圖通過通道的改變情況來研究這條本質規律。然而,終於有一天,輝輝在堆積成山的演算紙中崩潰了……他把終端機往地面一砸(終端機也足夠堅固無法破壞),轉而求助於你,說道:「你老兄把這程式寫寫吧」。輝輝希望能隨時通過終端機發出指令 query u v,向監測儀詢問此時洞穴u和洞穴v是否連通。現在你要為他編寫程式回答每一次詢問。已知在第一條指令顯示之前,jszx洞穴群中沒有任何通道存在。

input

第一行為兩個正整數n和m,分別表示洞穴的個數和終端機上出現過的指令的個數。以下m行,依次表示終端機上出現的各條指令。每行開頭是乙個表示指令種類的字串s("connect」、」destroy」或者」query」,區分大小寫),之後有兩個整數u和v (1≤u, v≤n且u≠v) 分別表示兩個洞穴的編號。

output

對每個query指令,輸出洞穴u和洞穴v是否互相連通:是輸出」yes」,否則輸出」no」。(不含雙引號)

sample input

樣例輸入1

200 5

query 123 127

connect 123 127

query 123 127

destroy 127 123

query 123 127

樣例輸入2

3 5connect 1 2

connect 3 1

query 2 3

destroy 1 3

query 2 3

sample output

樣例輸出1

noyes

no樣例輸出2

yesno

hint

資料說明

10%的資料滿足n≤1000, m≤20000 20%的資料滿足n≤2000, m≤40000

30%的資料滿足n≤3000, m≤60000 40%的資料滿足n≤4000, m≤80000

50%的資料滿足n≤5000, m≤100000 60%的資料滿足n≤6000, m≤120000

70%的資料滿足n≤7000, m≤140000 80%的資料滿足n≤8000, m≤160000

90%的資料滿足n≤9000, m≤180000 100%的資料滿足n≤10000, m≤200000

保證所有destroy指令將摧毀的是一條存在的通道本題輸入、輸出規模比較大,建議c\c++選手使用scanf和printf進行i\o操作以免超時

題解比模板還模板。。。連權值都不用維護,直接打板。。。

**

#include

#define ls son[v][0]

#define rs son[v][1]

using

namespace std;

const

int m=

1e5+5;

int n,m,dad[m]

,son[m][2

],sta[m]

;bool rev[m]

;bool

notroot

(int v)

void

turn

(int v)

void

push

(int v)

void

spin

(int v)

void

splay

(int v)

}void

access

(int v)

void

beroot

(int v)

intfindroot

(int v)

void

link

(int a,

int b)

void

cut(

int a,

int b)

void

ques

(int a,

int b)

voidin(

)voidac(

)}}int

main()

BZOJ2049 SDOI2008 洞穴堪測

lct初學題。注意兩個地方。splay樹維護的是lct的資訊。莫將splay看成被維護資訊的樹。如何link和cut?link很簡單。void link int x,int y 但是本人對cut操作一直有個困惑。就是lct中沒有這條邊怎麼辦?需要特判。詳見我的部落格 lct學習之旅 reverse標...

BZOJ2049 洞穴勘測(LCT)

太長也懶得複製了 題目大意就是 給你n個點,這n個點一開始沒有路徑相連,然後給出m個操作,包含三個操作 1.query x,y 詢問x,y之間是否連通。2.connect x,y 在x,y之間連一條邊。3.destroy x,y 將x,y之間的邊刪除。最後對於每個query,如果連通就輸出 yes ...

Bzoj 2726 SDOI 任務安排

memory limit 131072kb 64bit io format lld llu description 機器上有n個需要處理的任務,它們構成了乙個序列。這些任務被標號為1到n,因此序列的排列為1,2,3.n。這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工...