티스토리 뷰

반응형

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

 

14676번: 영우는 사기꾼?

프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 건물 종류의 개수 N, 건물 사이 관계의 개수 M, 영우의 게임 정보의 개수 K가 주어진다.(1 ≤ N, M, K ≤ 100,000) 다음 줄부터 M줄에 걸쳐

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 구현
  • 그래프 이론
  • 위상 정렬

 


 

⊙ 문제 접근 과정

 

1️⃣ graph[i].append(j), indegree[j]+=1

     m만큼 반복

 

2️⃣ 건물을 K번 짓거나 파괴

 

3️⃣ 1은 건설, 2는 파괴

     1일 시, 선행 건물이 있는지 판별

     2일 시, 건물이 지어졌는지 확인

 


 

⊙ 문제 풀이

 

import sys

N, M, K = map(int, sys.stdin.readline().split())

graph = [[] for _ in range(N+1)]
build = [0]*(N+1)
indegree = [0]*(N+1)
flag = False

for _ in range(M):
    i, j= map(int, sys.stdin.readline().split())
    graph[i].append(j)
    indegree[j]+=1

for _ in range(K):
    command, building = map(int, sys.stdin.readline().split())
    if command == 1:
        if indegree[building]:
            flag = True
            break

        build[building]+=1

        if build[building] == 1:
            for i in graph[building]:
                indegree[i]-=1
    else:
        if build[building] <= 0:
            flag = True
            break

        build[building]-=1

        if not build[building]:
            for i in graph[building]:
                indegree[i]+=1

if flag:
    print("Lier!")
else:
    print("King-God-Emperor")

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함