Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            string sizeStr = Console.ReadLine();

            string[] sizeArray = sizeStr.Split(' ');
            int      vGraph = int.Parse(sizeArray[0]), eFirst = int.Parse(sizeArray[1]);


            DSU test = new DSU(vGraph);

            Edge[] eArray = new Edge[eFirst];
            int[]  mean   = new int[3];

            string str = "";

            for (int i = 0; i < eFirst; i++)
            {
                str = Console.ReadLine();
                string[] strSplit = str.Split(' ');
                eArray[i] = new Edge(int.Parse(strSplit[0]), int.Parse(strSplit[1]), int.Parse(strSplit[2]));
            }

            Array.Sort(eArray);

            bool[] eTrue = new bool[eFirst];
            for (int i = 0; i < eFirst; i++)
            {
                eTrue[i] = false;
            }

            Edge e = new Edge();

            for (int i = 0; i < eFirst; i++)
            {
                e = eArray[i];

                if (test.check(e.from, e.to))
                {
                    test.union(e.from, e.to);
                    eTrue[i] = true;
                    Console.WriteLine(e.from + "--" + e.to + ";");
                }
                if (test.count == 1)
                {
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            DSU test = new DSU(5);
            //test.hang(2, 4);
            //test.hang(0, 3);
            //Console.WriteLine(test);
            //Console.WriteLine(test.find(2));


            FileStream fstreamR = File.OpenRead(@"D:\t.txt");
            FileStream fstreamW = new FileStream(@"D:\t2.txt", FileMode.OpenOrCreate);

            string sFile;
            int    currentWord = 0;

            byte[] arrayW;
            byte[] array = new byte[fstreamR.Length];
            fstreamR.Read(array, 0, array.Length);
            sFile = System.Text.Encoding.Default.GetString(array);
            string[] strArray = sFile.Split(' ', '\n');
            while (currentWord < (strArray.Length - 1))
            {
                if (strArray[currentWord] == "RESET")
                {
                    currentWord++;
                    test.reset(int.Parse(strArray[currentWord++]));
                    arrayW = System.Text.Encoding.Default.GetBytes("RESET DONE\r\n");
                    fstreamW.Write(arrayW, 0, arrayW.Length);
                }
                if (strArray[currentWord] == "JOIN")
                {
                    currentWord++;
                    int vertexA = int.Parse(strArray[currentWord++]);
                    int vertexB = int.Parse(strArray[currentWord++]);
                    if (test.check(vertexA, vertexB))
                    {
                        arrayW = System.Text.Encoding.Default.GetBytes("ALREADY\r\n");
                        fstreamW.Write(arrayW, 0, arrayW.Length);
                    }
                    else
                    {
                        test.union(vertexA, vertexB);
                    }
                }
                if (strArray[currentWord] == "CHECK")
                {
                    currentWord++;
                    int vertexA = int.Parse(strArray[currentWord++]);
                    int vertexB = int.Parse(strArray[currentWord++]);
                    if (test.check(vertexA, vertexB))
                    {
                        arrayW = System.Text.Encoding.Default.GetBytes("YES\r\n");
                        fstreamW.Write(arrayW, 0, arrayW.Length);
                    }
                    else
                    {
                        arrayW = System.Text.Encoding.Default.GetBytes("NO\r\n");
                        fstreamW.Write(arrayW, 0, arrayW.Length);
                    }
                }
            }


            string s;

            s = Console.ReadLine();
            while (s != "end")
            {
                string[] str = s.Split(' ');
                if (str[0] == "RESET")
                {
                    test.reset(int.Parse(str[1]));
                    Console.WriteLine("RESET DONE");
                }
                if (str[0] == "JOIN")
                {
                    int vertexA = int.Parse(str[1]);
                    int vertexB = int.Parse(str[2]);
                    if (test.check(vertexA, vertexB))
                    {
                        Console.WriteLine("ALREADY");
                    }
                    else
                    {
                        test.union(vertexA, vertexB);
                    }
                }
                if (str[0] == "CHECK")
                {
                    int vertexA = int.Parse(str[1]);
                    int vertexB = int.Parse(str[2]);
                    if (test.check(vertexA, vertexB))
                    {
                        Console.WriteLine("YES");
                    }
                    else
                    {
                        Console.WriteLine("NO");
                    }
                }
                s = Console.ReadLine();
            }
        }