Exemple #1
0
        /*
         * Calculate the value of friendships
         */
        public static long RunUnionFind(int[][] edges)
        {
            var unionFind = new UnionFind();

            int count = 0;

            foreach (var edge in edges)
            {
                var left  = edge[0];
                var right = edge[1];
                if (left == right)
                {
                    continue;
                }

                if (unionFind.IsSameGroup(left, right))
                {
                    count++;
                    continue;
                }

                unionFind.Unite(left, right);
            }

            var groups = unionFind.GetGroups().Where(v => v != 0).Select(v => v + 1).ToList();

            groups.Sort();
            groups.Reverse();

            return(groups[0]);
        }
Exemple #2
0
        /*
         * Calculate the value of friendships
         */
        public static void RunUnionFindTestCase()
        {
            var unionFind = new UnionFind();
            var edges     = new int[6][];

            edges[0] = new int[] { 1, 2 };
            edges[1] = new int[] { 7, 4 };
            edges[2] = new int[] { 7, 3 };
            edges[3] = new int[] { 5, 8 };
            edges[4] = new int[] { 1, 3 };
            edges[5] = new int[] { 7, 3 };

            int count = 0;

            foreach (var edge in edges)
            {
                var left  = edge[0];
                var right = edge[1];
                if (left == right)
                {
                    continue;
                }

                if (unionFind.IsSameGroup(left, right))
                {
                    count++;
                    continue;
                }

                unionFind.Unite(left, right);
            }

            var groups = unionFind.GetGroups().Where(v => v != 0).Select(v => v + 1).ToList();

            groups.Sort();
            groups.Reverse();
        }