Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- opic
- 영어말하기
- 주석
- fibo
- 디피
- dp
- ㅂ
- 오픽점수잘받는방법
- 영어회화
- 안드로이드
- 탑다운
- topdown
- 오픽노잼
- English
- XML
- dynamicProgramming
- 다이나믹프로그래밍
- 오픽공부법
- 안드로이드주석
- 바텀업
- 오픽가격
- 이진탐색 #나무 자르기
- 이진탐색
- 오픽
- 피보나치수열
- stack 스택
- XML주석
- 오픽노잼공부방법
- 메모이제이션
Archives
RUBY
[백준] 친구 네트워크 본문
출처:: www.acmicpc.net/problem/4195
분류:: unionfind
1. 문제 이해 및 해결과정
2. 풀이방법
1. 유니온파인드 [python]
#친구 네트워크
#https://www.acmicpc.net/problem/4195
import sys
sys.stdin = open("input.txt","r")
tc=int(input())
def find_parent(x):
if parent[x]!=x:
parent[x]=find_parent(parent[x])
return parent[x]
def union_parent(a,b): #a가 b의 부모라는 것 전제
a=find_parent(a)
b=find_parent(b)
if a!=b: #a의 부모노드와 b의 부모노드가 같지않으면
parent[b]=a #b의 부모를 a로 설정
cnt[a]+=cnt[b] #a의 친구관계 숫자에 b가 가지고 있던 친구 수 더해줌
for _ in range(tc):
f=int(input()) #친구관계수
parent=dict() #부모
cnt=dict() #네트워크 친구수
for _ in range(f):
a,b=input().split()
#입력받은 이름이 부모딕셔너리에 없는 경우
#부모와 cnt 초기화 과정
if a not in parent:
parent[a]=a
cnt[a]=1
if b not in parent:
parent[b]=b
cnt[b]=1
# print(parent)
# print(cnt)
union_parent(a,b)
print(cnt[find_parent(a)])
3. 오답원인
1. 원래 만들던 union함수를 이용하면, a b가 같은 집합에 있어도 또 합쳐지는 일이 발생한다
def union_parent(parent,a,b): #기존의 union
a=find_parent(parent,a)
b=find_parent(parent,b)
if a<b:
parent[b]=a
else:
parent[a]=b
4. 알게된 점
'PS > BOJ' 카테고리의 다른 글
[백준] 유기농 배추 (0) | 2020.09.17 |
---|---|
[백준] 기타 레슨 (0) | 2020.09.17 |
[백준] 여행 가자 (0) | 2020.09.16 |
[백준] 용액 (0) | 2020.09.16 |
[백준] 입국심사 (0) | 2020.09.16 |
Comments