提出 #52603101
ソースコード 拡げる
fun main() {
val (n, m) = readln().split(" ").map { it.toInt() }
val uf = UnionFind(n + 1)
val ab = List(m) {
val (a, b) = readln().split(" ").map { it.toInt() }
uf.union(a, b)
a to b
}
val bucket = IntArray(n + 1)
val set = mutableSetOf<Int>()
for(i in 1..n) {
val root = uf.find(i)
set.add(root)
bucket[root]++
}
var ans = 0L
var diff = 0
for(root in set) {
val count = bucket[root].toLong()
if(count < 3) {
if(count == 2L) {
diff++
}
continue
}
val ideal = count * (count - 1) / 2
ans += ideal
}
println(ans - (m - diff))
}
private class UnionFind(n: Int) {
private val roots = IntArray(n) { it }
private val ranks = IntArray(n) { 1 }
fun find(i: Int): Int {
if(roots[i] != i) {
roots[i] = find(roots[i])
}
return roots[i]
}
fun isSame(x: Int, y: Int): Boolean {
return find(x) == find(y)
}
fun union(x: Int, y: Int) {
val rootX = find(x)
val rootY = find(y)
if(rootX == rootY) {
return
}
if(ranks[rootX] > ranks[rootY]) {
roots[rootY] = rootX
++ranks[rootX]
} else {
roots[rootX] = rootY
++ranks[rootY]
}
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - New Friends |
| ユーザ | dhirabayashi |
| 言語 | Kotlin (Kotlin/JVM 1.8.20) |
| 得点 | 350 |
| コード長 | 1482 Byte |
| 結果 | AC |
| 実行時間 | 468 ms |
| メモリ | 75764 KiB |
コンパイルエラー
Main.kt:5:9: warning: variable 'ab' is never used
val ab = List(m) {
^
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 350 / 350 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, random_32.txt, random_33.txt, sample_01.txt, sample_02.txt, sample_03.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| random_01.txt | AC | 454 ms | 75516 KiB |
| random_02.txt | AC | 386 ms | 73984 KiB |
| random_03.txt | AC | 387 ms | 70388 KiB |
| random_04.txt | AC | 370 ms | 70120 KiB |
| random_05.txt | AC | 468 ms | 75132 KiB |
| random_06.txt | AC | 389 ms | 74660 KiB |
| random_07.txt | AC | 363 ms | 75764 KiB |
| random_08.txt | AC | 302 ms | 69840 KiB |
| random_09.txt | AC | 317 ms | 68768 KiB |
| random_10.txt | AC | 270 ms | 65496 KiB |
| random_11.txt | AC | 217 ms | 60708 KiB |
| random_12.txt | AC | 126 ms | 44104 KiB |
| random_13.txt | AC | 296 ms | 67824 KiB |
| random_14.txt | AC | 220 ms | 60772 KiB |
| random_15.txt | AC | 148 ms | 49252 KiB |
| random_16.txt | AC | 215 ms | 60640 KiB |
| random_17.txt | AC | 329 ms | 70568 KiB |
| random_18.txt | AC | 89 ms | 42208 KiB |
| random_19.txt | AC | 371 ms | 72296 KiB |
| random_20.txt | AC | 246 ms | 61624 KiB |
| random_21.txt | AC | 406 ms | 72728 KiB |
| random_22.txt | AC | 333 ms | 69304 KiB |
| random_23.txt | AC | 389 ms | 75064 KiB |
| random_24.txt | AC | 368 ms | 74476 KiB |
| random_25.txt | AC | 376 ms | 74364 KiB |
| random_26.txt | AC | 252 ms | 62552 KiB |
| random_27.txt | AC | 360 ms | 75116 KiB |
| random_28.txt | AC | 139 ms | 68568 KiB |
| random_29.txt | AC | 131 ms | 52464 KiB |
| random_30.txt | AC | 54 ms | 39968 KiB |
| random_31.txt | AC | 53 ms | 39968 KiB |
| random_32.txt | AC | 54 ms | 39812 KiB |
| random_33.txt | AC | 56 ms | 39996 KiB |
| sample_01.txt | AC | 53 ms | 39888 KiB |
| sample_02.txt | AC | 52 ms | 39780 KiB |
| sample_03.txt | AC | 54 ms | 39776 KiB |