裸的並查集,每次修好乙個點之後就掃一遍,將它與在它連線範圍內的之前就修好的點進行合併,唯一需要注意的點就是可以用點之間距離的平方來避免精度問題
#include
#include
#include
const
int maxn =
10000+5
;struct point point[maxn]
;struct union_find
union_find
(int n)
intfind
(int x)
void
merge
(int x,
int y)
bool
judge
(int x,
int y)};
int n, d;
bool is_fixed[maxn]
;int
dis(point a, point b)
intmain()
char f;
while
(std::cin >> f)
}else
}return0;
}
這道題需要詢問帶元素 0
00 的集合的元素個數,可以開乙個陣列 sum
[i
]sum[i]
sum[i]
,表示以 i
ii 為根節點的集合的元素個數,因為每個集合的元素個數都儲存在根節點上了,所以在合併和輸出的時候都要找到根節點來進行操作
#include
#include
const
int maxn =
30000+2
;int n, m;
struct union_find
}union_find
(int n)
intfind
(int x)
void
merge
(int a,
int b)}}
;int
main()
}printf
("%d\n"
, uf.sum[uf.
find(0
)]);
}return0;
}
每次合併都會少乙個桌子,所以維護乙個 sum
sumsu
m 表示桌子的數量即可
#include
#include
const
int maxn =
1000+5
;struct union_find
union_find
(int n)
intfind
(int x)
void
merge
(int x,
int y)
bool
judge
(int x,
int y)};
intmain()
printf
("%d\n"
, uf.sum);}
return0;
}
kuangbin帶你飛專題
kuangbin帶你飛 專題一 簡單搜尋 kuangbin帶你飛 專題二 搜尋高階 kuangbin帶你飛 專題三 dancing links kuangbin帶你飛 專題四 最短路練習 kuangbin帶你飛 專題五 並查集 kuangbin帶你飛 專題六 最小生成樹 kuangbin帶你飛 專題...
kuangbin帶你飛 專題五 並查集 題解
專題五 並查集 雞山村發生了一次 acm asia cooperated medical 亞洲聯合醫療隊 已經為聖維爾供電中心的電腦搭建了乙個無線網路,但受到了一次不可預知的餘震攻擊,因此網路中的所有電腦都被破壞了。電腦被逐台修復,網路逐步恢復了工作。由於受到硬體的約束,每台電腦只能與距離它不超過 ...
kuangbin帶你飛 專題十八 字尾陣列
寫了好久才把字尾陣列的專題寫完 字尾陣列就是對字串的所有字尾來搞事,通過對這些字尾排序,來得到這些字尾之前存在的關係。字尾陣列中的sa陣列 排名陣列 和height 相鄰排名lcp 有很多很有用的特性,使得在處理一些字串問題的時候很給力,比較流行的求字尾陣列的演算法有o nlogn 的倍增求法和o ...