結果
| 問題 |
No.1767 BLUE to RED
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-02-02 14:02:21 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 1,869 ms / 2,000 ms |
| コード長 | 1,300 bytes |
| コンパイル時間 | 13,483 ms |
| コンパイル使用メモリ | 458,764 KB |
| 実行使用メモリ | 127,652 KB |
| 最終ジャッジ日時 | 2024-06-11 09:24:11 |
| 合計ジャッジ時間 | 41,994 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
class UnionFind(val size: Int) {
private val vec = IntArray(size){-1}
fun find(a: Int): Int {
return if (vec[a] < 0) {
a
}else {
vec[a] = find(vec[a])
vec[a]
}
}
fun same(a: Int, b: Int): Boolean {
return find(a) == find(b)
}
fun unite(a: Int, b: Int): Boolean {
val ar = find(a)
val br = find(b)
if (ar == br) return false
if (vec[ar] < vec[br]) {
vec[ar] += vec[br]
vec[br] = ar
}else {
vec[br] += vec[ar]
vec[ar] = br
}
return true
}
fun sizeOf(a: Int): Int {
return -vec[find(a)]
}
}
fun main() {
val (n, m) = readLine()!!.split(' ').map(String::toInt)
val a = readLine()!!.split(' ').map(String::toInt)
val b = readLine()!!.split(' ').map(String::toInt)
val uft = UnionFind(n + m + 1)
val allCell = (a + b).sorted()
for (i in 0 until n + m) {
if (a.binarySearch(allCell[i]) >= 0) {
uft.unite(i, n + m)
}
}
var result = 0
for (i in (1 until n + m).sortedBy { allCell[it] - allCell[it - 1] }) {
if (uft.unite(i, i - 1)) {
result += allCell[i] - allCell[i - 1]
}
}
println(result)
}