static void Solver(TextReader reader, TextWriter writer) { int[] nq = reader.ReadLine().Split().Select(int.Parse).ToArray(); (int n, int q) = (nq[0], nq[1]); var dsu = new DSU(n); for (int i = 0; i < q; i++) { int[] tuv = reader.ReadLine().Split().Select(int.Parse).ToArray(); (int t, int u, int v) = (tuv[0], tuv[1], tuv[2]); if (t == 0) { dsu.Merge(u, v); } else { if (dsu.Same(u, v)) { writer.WriteLine("1"); } else { writer.WriteLine("0"); } } } }
public void Line() { int n = 500000; var uf = new DSU(n); for (int i = 0; i < n - 1; i++) { uf.Merge(i, i + 1); } uf.Size(0).Should().Be(n); uf.Groups().Should().HaveCount(1); }
public void LineReverse() { int n = 500000; var uf = new DSU(n); for (int i = n - 2; i >= 0; i--) { uf.Merge(i, i + 1); } uf.Size(0).Should().Be(n); uf.Groups().Should().HaveCount(1); }
public void Simple() { var uf = new DSU(2); uf.Same(0, 1).Should().BeFalse(); int x = uf.Merge(0, 1); uf.Leader(0).Should().Be(x); uf.Leader(1).Should().Be(x); uf.Same(0, 1).Should().BeTrue(); uf.Size(0).Should().Be(2); }