結果
問題 | No.1054 Union add query |
ユーザー | ああいい |
提出日時 | 2022-01-27 20:15:01 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,632 ms / 2,000 ms |
コード長 | 1,009 bytes |
コンパイル時間 | 762 ms |
コンパイル使用メモリ | 82,024 KB |
実行使用メモリ | 288,512 KB |
最終ジャッジ日時 | 2024-06-07 17:30:11 |
合計ジャッジ時間 | 9,119 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 37 ms
52,608 KB |
testcase_01 | AC | 36 ms
52,224 KB |
testcase_02 | AC | 38 ms
52,352 KB |
testcase_03 | AC | 950 ms
136,704 KB |
testcase_04 | AC | 1,632 ms
288,512 KB |
testcase_05 | AC | 672 ms
107,264 KB |
testcase_06 | AC | 586 ms
179,284 KB |
testcase_07 | AC | 402 ms
179,604 KB |
testcase_08 | AC | 568 ms
179,468 KB |
testcase_09 | AC | 1,044 ms
281,248 KB |
testcase_10 | AC | 523 ms
274,240 KB |
ソースコード
import sys r = sys.stdin N,Q = map(int,r.readline().split()) sys.setrecursionlimit(10 ** 8) parent = [[i,1,{i},0] for i in range(N+1)] def find(i): if parent[i][0] == i: return i parent[i][0] = find(parent[i][0]) return parent[i][0] def unite(i,j): I = find(i) J = find(j) if I == J:return False if parent[I][1] > parent[J][1]: I,J = J,I #parent[J] = (J,parent[I][1] + parent[J][1],parent[J][2] | parent[I][2],parent[J][3]) parent[J][1] += parent[I][1] parent[J][2] |= parent[I][2] s = parent[J][3] t = parent[I][3] for v in parent[I][2]: dat[v] = dat[v] + t - s parent[I][0] = J return True dat = [0] * (N+1) for _ in range(Q): t,a,b = map(int,r.readline().split()) if t == 1: unite(a,b) elif t == 2: i = find(a) #parent[i] = (i,parent[i][1],parent[i][2],parent[i][3] + b) parent[i][3] += b else: n = parent[find(a)][3] print(dat[a] + n)