import Foundation final class FileIO { private let buffer:[UInt8] private var index: Int = 0 init(fileHandle: FileHandle = FileHandle.standardInput) { buffer = Array(try! fileHandle.readToEnd()!) + [UInt8(0)] // 인덱스 범위 초과 방지 } @inline(__always) private func read() -> UInt8 { defer { index += 1 } return buffer[index] } @inline(__always) func readInt() -> Int { var sum = 0 var now = read() var isPositive = true while now == 10 || now == 32 { now = read() } // 공백과 줄바꿈 무시 if now == 45 { isPositive = false; now = read() } // 음수 처리 while now >= 48, now <= 57 { sum = sum * 10 + Int(now-48) now = read() } return sum * (isPositive ? 1 : -1) } } func main() { let fp = FileIO() let N = fp.readInt(), M = fp.readInt(), K = fp.readInt() var candy: [Int] = [0] for _ in 1...N { candy.append(fp.readInt()) } var roots: [Int] = (0...N).map{Int($0)} var rank: [Int] = Array(repeating: 0, count: N+1) func find(_ x: Int) -> Int { if x != roots[x] { roots[x] = find(roots[x]) } return roots[x] } func union(_ x: Int, _ y: Int) { var a = find(x), b = find(y) if a == b { return } if rank[a] < rank[b] { swap(&a, &b) } roots[b] = a if rank[a] == rank[b] { rank[a] += 1 } } for _ in 0..