提出 #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
結果
AC × 3
AC × 36
セット名 テストケース
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