提出 #64783417
ソースコード 拡げる
@OptIn(ExperimentalStdlibApi::class)
fun main() {
val n = Sc.int()
val m = Sc.int()
val graph = List(n) { mutableListOf<Int>() }
repeat(m) {
val u = Sc.int() - 1
val v = Sc.int() - 1
graph[u].add(v)
graph[v].add(u)
}
// 1, 2, ..., k が接続する全ての辺からなる UF
val allUf = UnionFind(n)
// 1, 2, ..., k 内の辺からなる UF
val minUf = UnionFind(n)
val ans = (0..<n).map { k ->
for (v in graph[k]) {
allUf.merge(k, v)
if (v < k) minUf.merge(k, v)
}
if (minUf.size(0) != k + 1) {
-1
} else {
allUf.size(0) - k - 1
}
}
println(ans.joinToString("\n"))
}
// ==================== Libraries ====================
object Sc {
private val buffer: ArrayDeque<String> = ArrayDeque()
fun string(): String {
while (buffer.isEmpty()) buffer.addAll(readln().split(" "))
return buffer.removeFirst()
}
fun int(): Int = string().toInt()
fun long(): Long = string().toLong()
}
class UnionFind(
private val _size: Int,
) {
/**
* 非負 -> 親の要素
* 負 -> その要素が代表元である集合のサイズ (符号反転)
*/
private val parentOrSizes = IntArray(_size) { -1 }
/** v が属する集合の代表元を返す */
fun leader(v: Int): Int =
if (parentOrSizes[v] < 0) {
v
} else {
parentOrSizes[v] = leader(parentOrSizes[v])
parentOrSizes[v]
}
/** u が属する集合と v が属する集合を合併し、新たな集合の代表元を返す */
fun merge(
u: Int,
v: Int,
): Int {
var u = leader(u)
var v = leader(v)
if (u != v) {
if (-parentOrSizes[u] < -parentOrSizes[v]) u = v.also { v = u } // swap
parentOrSizes[u] += parentOrSizes[v]
parentOrSizes[v] = u
}
return u
}
/** u と v が同じ集合に属するかを返す */
fun same(
u: Int,
v: Int,
): Boolean = leader(u) == leader(v)
/** v が属する集合の大きさを返す */
fun size(v: Int): Int = -parentOrSizes[leader(v)]
/** 各集合を返す */
@OptIn(ExperimentalStdlibApi::class)
fun groups(): List<List<Int>> {
val groups = List(_size) { mutableListOf<Int>() }
for (v in 0..<_size) groups[leader(v)].add(v)
return groups.mapNotNull { group -> if (group.isEmpty()) null else group.toList() }
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Reachable Set |
| ユーザ | Tiramister |
| 言語 | Kotlin (Kotlin/JVM 1.8.20) |
| 得点 | 450 |
| コード長 | 2584 Byte |
| 結果 | AC |
| 実行時間 | 865 ms |
| メモリ | 95120 KiB |
コンパイルエラー
Main.kt:73:13: warning: name shadowed: u
var u = leader(u)
^
Main.kt:74:13: warning: name shadowed: v
var v = leader(v)
^
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 450 / 450 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 01_random_40.txt, 01_random_41.txt, 01_random_42.txt, 01_random_43.txt, 01_random_44.txt, 01_random_45.txt, 01_random_46.txt, 01_random_47.txt, 01_random_48.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 87 ms | 43776 KiB |
| 00_sample_01.txt | AC | 89 ms | 43472 KiB |
| 00_sample_02.txt | AC | 89 ms | 43536 KiB |
| 00_sample_03.txt | AC | 90 ms | 43432 KiB |
| 01_random_04.txt | AC | 652 ms | 89960 KiB |
| 01_random_05.txt | AC | 654 ms | 91780 KiB |
| 01_random_06.txt | AC | 662 ms | 92672 KiB |
| 01_random_07.txt | AC | 699 ms | 91648 KiB |
| 01_random_08.txt | AC | 862 ms | 92196 KiB |
| 01_random_09.txt | AC | 815 ms | 92440 KiB |
| 01_random_10.txt | AC | 813 ms | 91736 KiB |
| 01_random_11.txt | AC | 815 ms | 94844 KiB |
| 01_random_12.txt | AC | 849 ms | 91444 KiB |
| 01_random_13.txt | AC | 812 ms | 91252 KiB |
| 01_random_14.txt | AC | 835 ms | 91476 KiB |
| 01_random_15.txt | AC | 587 ms | 74600 KiB |
| 01_random_16.txt | AC | 344 ms | 66844 KiB |
| 01_random_17.txt | AC | 194 ms | 65176 KiB |
| 01_random_18.txt | AC | 136 ms | 48408 KiB |
| 01_random_19.txt | AC | 140 ms | 48920 KiB |
| 01_random_20.txt | AC | 434 ms | 69400 KiB |
| 01_random_21.txt | AC | 384 ms | 67168 KiB |
| 01_random_22.txt | AC | 237 ms | 57568 KiB |
| 01_random_23.txt | AC | 479 ms | 70284 KiB |
| 01_random_24.txt | AC | 473 ms | 71052 KiB |
| 01_random_25.txt | AC | 418 ms | 67004 KiB |
| 01_random_26.txt | AC | 818 ms | 92820 KiB |
| 01_random_27.txt | AC | 845 ms | 94424 KiB |
| 01_random_28.txt | AC | 812 ms | 93344 KiB |
| 01_random_29.txt | AC | 853 ms | 92140 KiB |
| 01_random_30.txt | AC | 865 ms | 94668 KiB |
| 01_random_31.txt | AC | 861 ms | 94772 KiB |
| 01_random_32.txt | AC | 766 ms | 92808 KiB |
| 01_random_33.txt | AC | 848 ms | 92032 KiB |
| 01_random_34.txt | AC | 762 ms | 92576 KiB |
| 01_random_35.txt | AC | 789 ms | 91964 KiB |
| 01_random_36.txt | AC | 812 ms | 95120 KiB |
| 01_random_37.txt | AC | 815 ms | 91776 KiB |
| 01_random_38.txt | AC | 92 ms | 43468 KiB |
| 01_random_39.txt | AC | 89 ms | 43388 KiB |
| 01_random_40.txt | AC | 90 ms | 43548 KiB |
| 01_random_41.txt | AC | 91 ms | 43768 KiB |
| 01_random_42.txt | AC | 88 ms | 43452 KiB |
| 01_random_43.txt | AC | 90 ms | 43608 KiB |
| 01_random_44.txt | AC | 88 ms | 43540 KiB |
| 01_random_45.txt | AC | 91 ms | 43756 KiB |
| 01_random_46.txt | AC | 90 ms | 43520 KiB |
| 01_random_47.txt | AC | 89 ms | 43484 KiB |
| 01_random_48.txt | AC | 87 ms | 43648 KiB |