BOJ 10775空港
5515 ワード
https://www.acmicpc.net/problem/10775
1秒、256 MBメモリ
input :第1行はゲートウェイ数G(1≦G≦10^5) を含む.第2列は飛行機の数P(1≦P≦10^5) Pの行にはgi(1≦gi≦G)が与えられる. output : が停泊可能な最大飛行機数出力 条件: i便を1便からgi(1≦gi≦G)ゲートの1つである に永久に停泊します.便がいずれの搭乗口にも停泊できない場合、空港は閉鎖され、その後はどの便も到着できません. 優先的に考える方法.
例2.
4
6
2
2
3
3
4
4
2、2、3、3を入力すると、関門に入ることができなくなり、空港は閉鎖されます.
では最大の数字から1まで、このドアに届くかどうかを判断すればいいのです.
2階建てのforゲートを使うと、最悪の場合は10^5*10^5で、飛行機数が10^5の場合、時間が爆発する可能性があります.
こうして見つけたのはunion-findを利用することです.現在ドッキングするゲートウェイが0でない場合は、ドッキングできます.これにより、残りの場所を表示するのではなく、各ゲートウェイを柔軟に接続できます.
最初の飛行機がドッキングする関門の値が0でなければ、飛行機をドッキングすることはできません.
可能であれば、現在の飛行機がドッキングするゲートの親ノードを見つけ、ゲートの親ノード-1に結合します.
2番ゲートでドッキングを行うと、1番ゲートでドッキングを行うことができます.
1秒、256 MBメモリ
input :
例2.
4
6
2
2
3
3
4
4
2、2、3、3を入力すると、関門に入ることができなくなり、空港は閉鎖されます.
では最大の数字から1まで、このドアに届くかどうかを判断すればいいのです.
2階建てのforゲートを使うと、最悪の場合は10^5*10^5で、飛行機数が10^5の場合、時間が爆発する可能性があります.
こうして見つけたのはunion-findを利用することです.現在ドッキングするゲートウェイが0でない場合は、ドッキングできます.これにより、残りの場所を表示するのではなく、各ゲートウェイを柔軟に接続できます.
最初の飛行機がドッキングする関門の値が0でなければ、飛行機をドッキングすることはできません.
可能であれば、現在の飛行機がドッキングするゲートの親ノードを見つけ、ゲートの親ノード-1に結合します.
2番ゲートでドッキングを行うと、1番ゲートでドッキングを行うことができます.
import sys
def union(a, b):
# a번 게이트에 도킹을 하면 그 게이트에 다음 비행기가 오면
# 이것은 a - 1번 게이트에 도킹을 하게 된다.
# 이를 모든 배열에 적용시키기 위해 union-find를 사용.
parent_a = find(a)
parent_b = find(b)
data[parent_a] = parent_b
def find(x):
if x == data[x]:
return x
data[x] = find(data[x])
return data[x]
g = int(sys.stdin.readline())
p = int(sys.stdin.readline())
ans = 0
data = [i for i in range(g + 1)]
for i in range(p):
gate = int(sys.stdin.readline())
where = find(gate)
# 현재 gate에 도킹이 가능한가를 판별해야함.
# 이 gate의 부모가 0에 존재한다면 더 이상 도킹이 불가.
if where == 0:
break
union(where, where - 1)
ans += 1
print(ans)
ゲートの数を基準にデータを作成する必要がありますが、飛行機の数を基準に作成したため、運転時エラーが発生しました.Reference
この問題について(BOJ 10775空港), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-10775-공항テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol