結果
| 問題 |
No.19 ステージの選択
|
| ユーザー |
6soukiti29
|
| 提出日時 | 2017-07-26 19:47:11 |
| 言語 | Nim (2.2.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,466 bytes |
| コンパイル時間 | 3,613 ms |
| コンパイル使用メモリ | 67,840 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-30 01:49:01 |
| 合計ジャッジ時間 | 4,611 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 24 |
コンパイルメッセージ
/home/judge/data/code/Main.nim(1, 35) Warning: imported and not used: 'algorithm' [UnusedImport]
ソースコード
import sequtils,strutils,strscans,algorithm,math
type
unionfindtree[I : static[int]] = array[I,int]
proc Init(U : var unionfindtree)=
for j in 0..<U.high:
U[j] = j
proc find(U : unionfindtree; a : int, b :int): bool=
var
s = a
t = b
while s != U[s]:
s = U[s]
while t != U[t]:
t = U[t]
return s == t
proc union(U : var unionfindtree; a : int ; b : int)=
if U.find(a,b):
return
var
s = a
t = b
t2 : int
while s != U[s]:
s = U[s]
while t != U[t]:
t2 = U[t]
U[t] = s
t = t2
U[t] = s
proc root(U : unionfindtree, a :int):int=
var
s = a
while s != U[s]:
s = U[s]
return s
type
item = tuple[id : int,level : float,S : int]
var
N = stdin.readline.parseInt
oya = newSeqWith(N,-1)
Items = newSeq[item](0)
L : float
S : int
ans = 0.0
p : item
line : string
s : set[int8]
uft : unionfindtree[101]
uft.Init
for i in 0..<N:
line = stdin.readline
discard scanf(line,"$f $i",L,S)
p = (i,L,S - 1)
uft.union(S - 1,i)
Items.add(p)
for i in 0..<N:
s.incl(uft.root(i).int8)
for i in s:
var j = i.int
var minoya = 100000.0
while oya[j] == -1:
oya[j] = i.int
minoya = min(minoya,Items[j].level)
j = Items[j].S
ans += minoya / 2
for t in Items:
ans += t.level / 2
echo round(ans,1)
6soukiti29