diff --git a/Coding/C++/Union_Find.cpp b/Coding/C++/Union_Find.cpp new file mode 100644 index 00000000..b55340e4 --- /dev/null +++ b/Coding/C++/Union_Find.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; + + +struct DSU{ + vector p, sum; + DSU(long long n) : p(n),sum(n,1) { + iota(p.begin(), p.end(), 0); + } + long long leader(long long x){ + return p[x] == x?p[x]:p[x]=leader(p[x]); + } + bool same(long long u, long long v){ + return leader(u) == leader(v); + } + void merge(long long u, long long v) { + u = leader(u), v = leader(v); + if(sum[u]>n>>m; + vector a(n); + DSU f(n); + for(int i=0;i>a[i]; + f.sum[i]=a[i]; + } + for(int i=0;i>u>>v; + u--;v--; + f.merge(u,v); + } + + + return 0; +}