結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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))
0