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
#includeusingnamespace
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...