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; } } }
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(); } }