發現自己寫了兩道題都把find函式寫得一塌糊塗。。。一題是沒有路徑壓縮過不了,一題是因為前面寫錯過弄混了,不三不四的。。。總結很重要啊!!
路徑壓縮:遞迴寫法:
int find (int x)
return father[x]; }
非遞迴寫法:
int find(int x)
return x; }
一般寫法:
非遞迴遞迴:
int find (int x)
return x;// }
遞迴寫法:
int find(int x)
return x; }
總結:所謂的路徑壓縮,就是把根節點下面的所有子孫直接與根節點相連,這樣搜尋時搜尋深度為1,而一般的寫法只是把當前結點與它的父節點直接相連,那麼搜尋深度就》1了,時間就長了。要知道是不是路徑壓縮(有時我會弄混),只要看是不是把它的父節點設定為它的爺爺結點就行了。只針對個人總結。
並查集Find函式
void find int x int find int x while p x return x 並查集的應用有很多這裡給大家推薦一道很好的題。這道題的 如下 int pre maxn maxx maxn num maxn int find int x while p x return x voi...
並查集 並查集
本文參考了 挑戰程式設計競賽 和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 ...
並查集之The Suspects
在不傳播疾病的大學 nssu 中,有很多學生群體。同一組的學生經常互相交流,學生可以加入幾個小組。為了防止sars可能傳播,nsusu收集所有學生組的成員名單,並在其標準操作程式 sop 中執行以下規則。一旦乙個小組中的成員是嫌疑犯,該組中的所有成員都是嫌疑犯。然而,他們發現,當乙個學生被認定為嫌疑...