2644번 마을 수 계산 문제 한국은 가족 혹은 친척 간의 관계를 마을 수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이들 마을 수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자녀 사이를 1촌으로 정의하고 앞으로 사람들 간 마을 수를 계산한다. 예를 들어 나와 아버지, 아버지와 할아버지는 각각 한 치로 나오고 할아버지는 두 치가 되고 아버지 형제들과 할아버지는 한 치, 나와 아버지 형제들과는 세 치가 된다. 여러 사람에 대한 부모와 자녀의 관계가 주어졌을 때 주어진 두 마을의 수를 계산하는 프로그램을 만들어라. 입력자는 1,2…www.acmicpc.net
▲문제=한국은 가족이나 친척 간의 관계를 촌수라는 단위로 표현하는 독특한 문화를 갖고 있다. 이들 마을 수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자녀 사이를 1촌으로 정의하고 앞으로 사람들 간 마을 수를 계산한다. 예를 들어 나와 아버지, 아버지와 할아버지는 각각 한 치로 나오고 할아버지는 두 치가 되고 아버지 형제들과 할아버지는 한 치, 나와 아버지 형제들과는 세 치가 된다.여러 사람에 대한 부모와 자녀의 관계가 주어졌을 때 주어진 두 마을의 수를 계산하는 프로그램을 만들어라. 문제풀이
n=int(input())a,b=map(int,input().ω())m=int(input())#01=={}[=[0]*(n+1)res=[]#02foriinrange(n):dic[i+1]=setforforiinrange(m):x,ymapmap(int,input().ω())dic[x].x]。add(y)dic[y].add(x)#03defdfs(v,num):num+=1visited(v)idic[v]の場合:res.dfs(i,num)#04visited(a,0)iflen(res)==0:print(res[0]-1)visited:print(res[0]-1)
– #01:입력값의 관계를 정리하는 dic과 방문여부를 확인하는 visited와 정답을 입력받는 res를 선언해준다.-#02:dic에 i+1번째까지 초기화시킨다. 이후 입력값을 각각 서로 하나씩 추가해준다.-#03 : 함수를 통해 a에서 b까지 향해 마을 수를 계산한다. visited를 통해 방문하지 않은 값이 있으면 방문하여 num 값을 1 추가시킨다. 최종적으로 v==b가 되었을 때, 지금까지 쌓여 온 num(마을수) 값을 res에 추가한다. – #04 : res가 0이면 -1을 출력, 그렇지 않으면 res[0]-1을 출력해 준다.