參觀路線 並查集 dfs

2022-08-17 14:24:12 字數 962 閱讀 7170

lambdaland由n個城市組成,任兩個城市間都有一條道路相連。  

下個月tbl準備參觀lambdaland。他將從城市1開始,以深度優先搜尋順序參觀能所有遍歷到的城市。 由於tbl是一位十分重要的人物,****盯上了他,並在他出發之前炸毀了m條道路。  

現在****僱傭你寫乙個程式,求出tbl的參觀路線。如果有多解,輸出字典序最小的。

20%的分數,n≤1000,m≤50000。

50%的分數,n≤30000,m≤800000。

100%的分數,n≤100000,m≤1000000。 

每個城市最多被參觀一次,每條道路可被炸毀多次。

暴力dfs,用乙個並查集實現把訪問過的連續的點縮去,對於一條邊$(u,i)$,表示$u,i$直接的道路被炸毀。我們每次訪問乙個節點$u$時,把出邊排序,開乙個指標表示下乙個跑到哪,用dsu跳到當前字典序最小的,沒跑過的點,再用lower_bound判斷當前點能不能跑,能跑直接dfs後return

#includeusing

namespace

std;

const

int n=100010

;vector

g[n];

intn,m;

int father[n*10

];void init(int x)

int find(int x)

bool

vis[n];

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;}

inline

void dfs(int

u) }next=find(next+1

); }

}

intmain()

init(n);

dfs(1);

}

並查集 DFS 搭橋

codevs1002 搭橋 description 有一矩形區域的城市中建築了若干建築物,如果某兩個單元格有乙個點相聯絡,則它們屬於同一座建築物。現在想在這些建築物之間搭建一些橋梁,其中橋梁只能沿著矩形的方格的邊沿搭建,如下圖城市1有5棟建築物,可以搭建4座橋將建築物聯絡起來。城市2有兩座建築物,但...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

200 島嶼數量(並查集 DFS)

200.島嶼數量 方法一 dfs或bfs 遍搜尋遍改變,訪問陣列也不需要 class solution,int r int c public intnumislands char grid return res public void dfs int i,int j,char grid return...