結果

問題 No.977 アリス仕掛けの摩天楼
ユーザー rhincodon66rhincodon66
提出日時 2020-01-31 22:45:56
言語 Kotlin
(1.9.10)
結果
WA  
実行時間 -
コード長 941 bytes
コンパイル時間 15,883 ms
コンパイル使用メモリ 443,380 KB
実行使用メモリ 59,848 KB
最終ジャッジ日時 2023-10-17 11:23:24
合計ジャッジ時間 28,564 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 315 ms
54,380 KB
testcase_01 AC 320 ms
54,372 KB
testcase_02 AC 317 ms
54,360 KB
testcase_03 AC 333 ms
54,364 KB
testcase_04 AC 318 ms
54,384 KB
testcase_05 AC 316 ms
54,380 KB
testcase_06 AC 322 ms
54,380 KB
testcase_07 AC 329 ms
54,432 KB
testcase_08 AC 330 ms
54,464 KB
testcase_09 AC 333 ms
54,460 KB
testcase_10 WA -
testcase_11 AC 325 ms
54,444 KB
testcase_12 AC 322 ms
54,444 KB
testcase_13 AC 489 ms
59,316 KB
testcase_14 AC 501 ms
59,444 KB
testcase_15 AC 483 ms
59,324 KB
testcase_16 AC 495 ms
59,328 KB
testcase_17 AC 489 ms
59,308 KB
testcase_18 AC 543 ms
59,556 KB
testcase_19 WA -
testcase_20 AC 574 ms
59,640 KB
testcase_21 AC 608 ms
59,848 KB
testcase_22 AC 636 ms
59,808 KB
testcase_23 AC 665 ms
59,824 KB
testcase_24 AC 650 ms
59,844 KB
testcase_25 AC 668 ms
59,816 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:3:10: warning: parameter 'args' is never used
fun main(args:Array<String>){
         ^
Main.kt:38:5: warning: a function is marked as tail-recursive but no tail calls are found
    tailrec fun find(x : Int) : Int{
    ^
Main.kt:40:16: warning: recursive call is not a tail call
        a[x] = find(a[x])
               ^

ソースコード

diff #

import java.util.*

fun main(args:Array<String>){
    val n = readLine()!!.toInt()
    val uf = UnionFind(n)
    repeat(n - 1){
        val (a,b) = readLine()!!.split(" ").map{it.toInt()}
        uf.unite(a,b)
    }
    val a = uf.find(0)
    var ok = true
    for(i in 0 until n){
        if(uf.find(i) != a) ok = false
    }
    println(if(ok) "Bob" else "Alice")
}

class UnionFind{
    var a = IntArray(0)
    constructor(n : Int){
        this.a = IntArray(n){-1}
    }

    fun unite(x : Int, y : Int) : Boolean{
        var X = find(x)
        var Y = find(y)
        if(X == Y) return false
        if(a[X] > a[Y]){
            val Z = X
            X = Y
            Y = Z
        }
        a[X] += a[Y]
        a[Y] = X
        return true
    }

    tailrec fun find(x : Int) : Int{
        if(a[x] < 0) return x
        a[x] = find(a[x])
        return a[x]
    }

    fun size(x : Int) : Int{
        return -a[find(x)]
    }
}
0