[python]白俊10755-空港解答


Overview


BOJ 10775空港Python回答
分類:分離セット(Disjoint Set,Union Find)

質問ページ


https://www.acmicpc.net/problem/10775

プールコード1-Union Find

"""
해석하기 쉽게 고침
union, find 함수를 기본으로 사용
"""
from sys import stdin


parents = []


def find(x: int) -> int:
    if x == parents[x]:
        return x
    parents[x] = find(parents[x])
    return parents[x]


# 패러미터를 받을 때, x < y 이도록 받기
def union(x: int, y: int) -> None:
    x, y = find(x), find(y)
    parents[y] = x


def main():
    def input():
        return stdin.readline().rstrip()
    global parents

    g = int(input())
    p = int(input())
    planes = [int(input()) for _ in range(p)]

    parents = list(i for i in range(g + 1))
    cnt = 0
    for plane in planes:
        plane = find(plane)
        # 도킹 가능한 게이트가 없는 경우
        if plane == 0:
            break
        union(plane - 1, plane)
        cnt += 1

    print(cnt)


if __name__ == "__main__":
    main()
飛行機がドッキングするたびに、find()でドッキング可能なドアを探します.find()の戻り値が0の場合、ドッキングステーションがないことを意味します.逆に、0より大きい値を返す場合は、値から1を減算した値を値に結合します.

プールコード2-グレースケールアルゴリズム(タイムアウト)

from sys import stdin


def main():
   def input():
       return stdin.readline().rstrip()

   g = int(input())
   p = int(input())
   planes = [int(input()) for _ in range(p)]

   res = 0
   gates = [False] * (g + 1)
   for plane in planes:
       while plane > 0 and gates[plane]:
           plane -= 1

       if plane == 0:
           break
       gates[plane] = True
       res += 1

   print(res)


if __name__ == "__main__":
   main()
採点結果はタイムアウトを示した.
飛行機が駅に入るたびに、停泊できる最も価値のある関門に停泊し、答えを求めます.