예제 #1
0
            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();
            }
예제 #2
0
파일: 5029313.cs 프로젝트: key-moon/compro
    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");
    }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
            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;
            }