public void Solve() { int N = NextInt(), M = NextInt(); var wuf = new WeightedUnionFind(N); M.REP(i => { int Li = NextInt(), Ri = NextInt(), Di = NextInt(); Li--; Ri--; wuf.Unite(Li, Ri, -Di); }); (wuf.IsValid() ? "Yes" : "No").WL(); }
static void Main() { WeightedUnionFind <long> uf = new WeightedUnionFind <long>(Read(), (x, y) => x + y, x => - x, 0); var m = Read(); for (int i = 0; i < m; i++) { if (!uf.TryUnite(Read() - 1, Read() - 1, Read())) { Console.WriteLine("No"); return; } } Console.WriteLine("Yes"); }
public void WeightedUnionFindTest() { WeightedUnionFind uf = new WeightedUnionFind(13); uf.Union(0, 1); uf.Union(1, 2); uf.Union(4, 5); uf.Union(0, 3); uf.Union(7, 8); uf.Union(8, 9); uf.Union(6, 11); uf.Union(11, 10); uf.Union(9, 12); uf.Union(1, 12); Assert.Equal(0, uf.Find(0)); Assert.Equal(4, uf.Find(4)); Assert.Equal(4, uf.Find(5)); }
public void WeightedUnionTest() { WeightedUnionFind uf = new WeightedUnionFind(13); uf.Union(0, 1); uf.Union(1, 2); uf.Union(4, 5); uf.Union(0, 3); uf.Union(7, 8); uf.Union(8, 9); uf.Union(6, 11); uf.Union(11, 10); uf.Union(9, 12); uf.Union(1, 12); Assert.False(uf.IsConnected(2, 5)); Assert.True(uf.IsConnected(7, 12)); Assert.False(uf.IsConnected(6, 8)); Assert.True(uf.IsConnected(0, 12)); }
public void Solve() { int N = NextInt(), M = NextInt(); var wuf = new WeightedUnionFind(N); M.REP(i => { int li = NextInt() - 1, ri = NextInt() - 1, di = NextInt(); wuf.Unite(li, ri, di); }); if (wuf.IsValid()) { "Yes".WL(); } else { "No".WL(); } return; }