結果
問題 | No.556 仁義なきサルたち |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:23:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 102 ms / 2,000 ms |
コード長 | 1,021 bytes |
コンパイル時間 | 149 ms |
コンパイル使用メモリ | 82,232 KB |
実行使用メモリ | 77,620 KB |
最終ジャッジ日時 | 2025-03-20 20:25:27 |
合計ジャッジ時間 | 2,105 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
n, m = map(int, input().split()) parent = list(range(n + 1)) # 1-based indexing size = [1] * (n + 1) def find(u): while parent[u] != u: parent[u] = parent[parent[u]] # Path compression u = parent[u] return u for _ in range(m): a, b = map(int, input().split()) root_a = find(a) root_b = find(b) if root_a == root_b: continue # Determine the winner and loser based on size and boss rank if size[root_a] > size[root_b]: winner, loser = root_a, root_b elif size[root_a] < size[root_b]: winner, loser = root_b, root_a else: # Same size, compare root values (smaller wins) if root_a < root_b: winner, loser = root_a, root_b else: winner, loser = root_b, root_a # Merge the loser into the winner's group parent[loser] = winner size[winner] += size[loser] # Output the boss for each monkey output = [] for i in range(1, n + 1): output.append(str(find(i))) print('\n'.join(output))