并查集
| |
| struct DSU { |
| vector<int> fa; |
| |
| explicit DSU(int n):fa(n + 1) { |
| for (int i = 1;i <= n;i++) |
| fa[i] = i; |
| } |
| |
| void init(int n) { |
| for (int i = 1;i <= n;i++) |
| fa[i] = i; |
| } |
| |
| int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); } |
| |
| bool same(int x, int y) { return find(x) == find(y); } |
| |
| void merge(int x, int y) { |
| if ((x = find(x)) == (y = find(y))) return; |
| fa[x] = y; |
| } |
| }; |
带权并查集
| |
| |
| struct DSU { |
| vector<int> fa; |
| vector<double> w; |
| |
| explicit DSU(int n):fa(n + 1), w(n + 1, 1) { |
| for (int i = 1;i <= n;i++) |
| fa[i] = i; |
| } |
| |
| void init(int n) { |
| for (int i = 1;i <= n;i++) |
| fa[i] = i, w[i] = 1; |
| } |
| |
| int find(int x) { |
| if (fa[x] == x) return x; |
| int pre = fa[x]; |
| fa[x] = find(fa[x]); |
| w[x] = w[x] * w[pre]; |
| return fa[x]; |
| } |
| |
| bool same(int x, int y) { return find(x) == find(y); } |
| |
| bool merge(int x, int y, double _w) { |
| if (same(x, y)) return abs(w[x] / w[y] - _w) < 1e-6; |
| int px = fa[x], py = fa[y]; |
| fa[px] = py; |
| w[px] = 1 / w[x] * _w * w[y]; |
| return true; |
| } |
| }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧