結果
| 問題 |
No.1767 BLUE to RED
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-02-02 13:57:54 |
| 言語 | Scala(Beta) (3.6.2) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,396 bytes |
| コンパイル時間 | 9,637 ms |
| コンパイル使用メモリ | 269,468 KB |
| 実行使用メモリ | 121,468 KB |
| 最終ジャッジ日時 | 2024-06-11 09:23:23 |
| 合計ジャッジ時間 | 48,925 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 TLE * 9 |
ソースコード
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
import scala.io.StdIn.*
import scala.util.chaining.*
import scala.math.*
class UnionFind(val size: Int):
private val vec = Array.fill(size){-1}
def find(a: Int): Int =
if vec(a) < 0 then
a
else
vec(a) = find(vec(a))
vec(a)
def same(a: Int, b: Int): Boolean = find(a) == find(b)
def unite(a: Int, b: Int): Unit =
val i = find(a)
val j = find(b)
if i != j then
if vec(i) < vec(j) then
vec(i) += vec(j)
vec(j) = i
else
vec(j) += vec(i)
vec(i) = j
@main def main =
val Array(n, m) = readLine().split(' ').map(_.toInt)
val a = readLine().split(' ').map(_.toInt)
val b = readLine().split(' ').map(_.toInt)
val allCell = Array.fill(n + m){0}
val isRed = Array.fill(n + m){false}
{
var ai = 0
var bi = 0
for i <- 0 until n + m do
if bi == m || (ai != n && a(ai) < b(bi)) then
allCell(i) = a(ai)
isRed(i) = true
ai += 1
else
allCell(i) = b(bi)
bi += 1
}
val uft = UnionFind(n + m + 1)
for i <- 0 until n + m if isRed(i) do
uft.unite(i, n + m)
var result = 0
for i <- (1 until n + m).sortBy(i => allCell(i) - allCell(i - 1)) do
if !uft.same(i, i - 1) then
result += allCell(i) - allCell(i - 1)
uft.unite(i, i - 1)
println(result)