結果
問題 | No.1054 Union add query |
ユーザー | ああいい |
提出日時 | 2022-01-27 20:06:34 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 925 bytes |
コンパイル時間 | 997 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 87,680 KB |
最終ジャッジ日時 | 2024-06-07 17:26:27 |
合計ジャッジ時間 | 5,844 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 33 ms
58,112 KB |
testcase_01 | AC | 32 ms
53,388 KB |
testcase_02 | AC | 33 ms
51,968 KB |
testcase_03 | TLE | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
ソースコード
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] = (find(parent[i][0]),1,0,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[I][2] | parent[J][2],parent[J][3]) s = parent[J][3] t = parent[I][3] for v in parent[I][2]: dat[v] = dat[v] + t - s parent[I] = (J,1,0,0) 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) else: n = parent[find(a)][3] print(dat[a] + n)