日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj2049 [Sdoi2008]Cave 洞穴勘测

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj2049 [Sdoi2008]Cave 洞穴勘测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[Sdoi2008]Cave 洞穴勘測

Time Limit: 10 Sec Memory Limit: 259 MB

Description

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

Input

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

Output

對每個Query指令,輸出洞穴u和洞穴v是否互相連通:是輸出”Yes”,否則輸出”No”。(不含雙引號)

Sample Input

樣例輸入1 cave.in

200 5

Query 123 127

Connect 123 127

Query 123 127

Destroy 127 123

Query 123 127

樣例輸入2 cave.in

3 5

Connect 1 2

Connect 3 1

Query 2 3

Destroy 1 3

Query 2 3

Sample Output

樣例輸出1 cave.out

No

Yes

No

樣例輸出2 cave.out

Yes

No

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指令將摧毀的是一條存在的通道本題輸入、輸出規(guī)模比較大,建議c\c++選手使用scanf和printf進行I\O操作以免超時





寫完這道題,我的LCT就有入門的可能啦!!!
LCT感覺好強的樣子。。。。。寫完板子后就是一通極其麻溜的操作的感覺是真的開心。。。

#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5, L = 0, R = 1; struct lpl{int fa, rev, size, son[2]; }node[maxn]; int n, m, top, st[maxn];namespace LCT{inline bool get(int x){return (node[node[x].fa].son[R] == x);}inline bool isroot(int x){return (node[node[x].fa].son[L] != x && node[node[x].fa].son[R] != x);}inline void update(int x){node[x].size = node[node[x].son[L]].size + node[node[x].son[R]].size + 1;}inline void pushdown(int x){if(!node[x].rev) return; node[x].rev = 0;node[node[x].son[L]].rev ^= 1; node[node[x].son[R]].rev ^= 1;swap(node[x].son[L], node[x].son[R]);}inline void rotate(int x){pushdown(x); int fa = node[x].fa, grdfa = node[fa].fa, which = (node[fa].son[R] == x);if(!isroot(fa)) node[grdfa].son[node[grdfa].son[R] == fa] = x; node[x].fa = grdfa;node[fa].son[which] = node[x].son[which ^ 1]; node[node[fa].son[which]].fa = fa;node[x].son[which ^ 1] = fa; node[fa].fa = x;update(fa); update(x);}inline void splay(int x){st[top = 1] = x;for(int i = x; !isroot(i); i = node[i].fa) st[++top] = node[i].fa;for(int i = top; i; i--) pushdown(st[i]);for(int fa; !isroot(x); rotate(x))if(!isroot(fa = node[x].fa)) rotate(get(x) == get(fa) ? fa : x);}inline void access(int x){for(int y = 0; x; y = x, x = node[x].fa) splay(x), node[x].son[R] = y;}inline void makeroot(int x){access(x), splay(x), node[x].rev ^= 1;}inline void link(int x, int y){makeroot(x); node[x].fa = y; splay(x);}inline void cut(int x, int y){makeroot(x); access(y); splay(y); node[x].fa = node[y].son[L] = 0;}inline int find(int x){access(x); splay(x); while(node[x].son[L]) x = node[x].son[L]; return x;} }int main() {scanf("%d%d", &n, &m); char s[25]; int u, v;while(m--){scanf("%s", s + 1); scanf("%d%d", &u, &v);if(s[1] == 'C') LCT::link(u, v);if(s[1] == 'D') LCT::cut(u, v);if(s[1] == 'Q') (LCT::find(u) == LCT::find(v)) ? (printf("Yes\n")) : (printf("No\n"));}return 0; }

轉載于:https://www.cnblogs.com/LLppdd/p/9582525.html

總結

以上是生活随笔為你收集整理的bzoj2049 [Sdoi2008]Cave 洞穴勘测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。