結果
| 問題 | No.556 仁義なきサルたち |
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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))
lam6er