이번 문제는 종속관계를 구현하여 해결하였다. a건물을 짓기 위해 b, c건물이 지어진 상태여야 한다면 building[a] = [b, c]
의 형태로 만들어 건물을 짓기 이전에 현재 건물들의 현황을 순회하여 이전에 지어야 하는 모든 건물이 조재할 경우에만 지을 수 있도록 하였다. 만약 building[a]
가 빈 리스트일 경우, 이전에 지어야 하는 건물이 없는 것이므로 그냥 바로 짓도록 한다. 건물을 부술 때에는 해당 건물이 존재한다면 1을 감소시키고, 없다면 Lier!를 출력하도록 하였다.
n, m, k = map(int, input().split())
building = [[] for i in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
building[b].append(a)
cur = [0 for _ in range(n+1)]
tech = []
for _ in range(k):
num, tower = map(int, input().split())
tech.append((num, tower))
for i in range(k):
num, tower = tech[i]
if num == 1:
flag = True
if not building[tower]:
cur[tower] += 1
else:
for n_tower in building[tower]:
if not cur[n_tower]:
flag = False
break
if not flag:
print("Lier!")
quit()
elif flag:
cur[tower] += 1
elif num == 2:
if cur[tower]:
cur[tower] -= 1
else:
print("Lier!")
quit()
print("King-God-Emperor")