cs [파이썬] 백준 1976 : 여행가자
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/PYTHON 알고리즘 연습

[파이썬] 백준 1976 : 여행가자

by 시몬쯔 2020. 2. 21.
728x90
반응형

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

 

 

 

1976번: 여행 가자

동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할

www.acmicpc.net

 

유니온파인드를 이용하는 문제.

 

import sys

input = sys.stdin.readline

 

N = int(input())

M = int(input())

 

adj = [[] for _ in range(N)] 

 

class DisjointSet:

    def __init__(self,n):

        self.parent = list(range(n))

        self.ch = [0]*n

        self.size = n

    def find_parent(self,x):

        while x != self.parent[x]: x = self.parent[x]

        return x

    def union(self,x,y):

        x = self.find_parent(x)

        y = self.find_parent(y)

 

        if x==y:

            return

 

        if self.ch[x] < self.ch[y]: #y가 애가 더 많으면

            self.ch[y] += 1

            self.parent[x] = y

        else:

            self.ch[x] += 1

            self.parent[y] = x

 

disj = DisjointSet(N+1)

 

for i in range(N):

    adj[i] = list(map(int,input().split()))

 

a,b,c = map(int,input().split())

 

for i in range(N):

    for j in range(N):

        if adj[i][j]:

            disj.union(i+1,j+1)

# print(disj.parent)

 

# if (disj.find_parent(a) == disj.find_parent(b)) and (disj.find_parent(b) == disj.find_parent(c)):

#     print("YES")       

# else:

#     print("NO")   

 

if len(set([disj.parent[i] for i in [a,b,c]]))==1:

    print("YES")

else:

    print("NO")

 

왜 런타임 에러가 나는지 모르겠다.

728x90
반응형

댓글