結果
| 問題 |
No.556 仁義なきサルたち
|
| コンテスト | |
| ユーザー |
rutilicus
|
| 提出日時 | 2020-10-14 20:47:07 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,994 bytes |
| コンパイル時間 | 13,511 ms |
| コンパイル使用メモリ | 446,752 KB |
| 実行使用メモリ | 57,912 KB |
| 最終ジャッジ日時 | 2024-07-20 19:22:07 |
| 合計ジャッジ時間 | 22,407 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 WA * 9 |
コンパイルメッセージ
Main.kt:84:17: warning: 'appendln(Int): kotlin.text.StringBuilder /* = java.lang.StringBuilder */' is deprecated. Use appendLine instead. Note that the new method always appends the line feed character '\n' regardless of the system line separator.
builder.appendln(uf.getTop(it) + 1)
^
ソースコード
class UnionFind(n: Int) {
private val parent = IntArray(n) { -1 }
private val rank = IntArray(n)
private val size = IntArray(n) { 1 }
private var numTree = n
private val top = IntArray(n) { it }
fun find(x: Int): Int {
if (parent[x] == -1) {
return x
} else {
parent[x] = find(parent[x])
return parent[x]
}
}
fun isSame(x: Int, y: Int): Boolean {
return find(x) == find(y)
}
fun getSize(): Int {
return numTree
}
fun sizeOf(x: Int): Int {
return size[find(x)]
}
fun rankOf(x: Int): Int {
return rank[find(x)]
}
fun getTop(x: Int): Int {
return top[find(x)]
}
fun unite(x: Int, y: Int) {
val parentX = find(x)
val parentY = find(y)
if (parentX == parentY) {
return
}
numTree--
if (sizeOf(parentX) < sizeOf(parentY)) {
top[parentX] = top[parentY]
} else if(sizeOf(parentX) > sizeOf(parentY)) {
top[parentY] = top[parentX]
} else if (parentX < parentY) {
top[parentY] = top[parentX]
} else {
top[parentX] = top[parentY]
}
if (rank[parentX] < rank[parentY]) {
parent[parentX] = parentY
size[parentY] += size[parentX]
} else {
parent[parentY] = parentX
size[parentX] += size[parentY]
if (rank[parentX] == rank[parentY]) {
rank[parentX]++
}
}
}
}
fun main() {
val builder = StringBuilder()
val (n, m) = readInputLine().split(" ").map { it.toInt() }
val uf = UnionFind(n)
repeat(m) {
val (a, b) = readInputLine().split(" ").map { it.toInt() - 1 }
uf.unite(a, b)
}
repeat(n) {
builder.appendln(uf.getTop(it) + 1)
}
print(builder.toString())
}
fun readInputLine(): String {
return readLine()!!
}
rutilicus