Skip to content

Commit cc2a02b

Browse files
authored
Merge pull request #150 from AlgorithmStudy-Allumbus/minjeong
Minjeong / 3์›” 1์ฃผ์ฐจ / 5๋ฌธ์ œ
2 parents a0d3b51 + b4e1daa commit cc2a02b

6 files changed

Lines changed: 159 additions & 1 deletion

โ€Ž_WeeklyChallenges/W13-[Union-Find]/Assignment_BOJ_1717_์ง‘ํ•ฉ์˜ํ‘œํ˜„.pyโ€Ž

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,36 @@
44
์œ ํ˜•: Union-Find, Graph
55
'''
66

7-
# PR ์˜ฌ๋ฆด ๋•Œ ๊ณผ์ œ ์ •๋‹ต ๊ณต๊ฐœ ์˜ˆ์ •
7+
import sys
8+
sys.setrecursionlimit(10 ** 6) # ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ ๋Š˜๋ฆฌ๊ธฐ
9+
input = sys.stdin.readline
10+
11+
# Union ์—ฐ์‚ฐ(๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์น˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜)
12+
def union(a, b):
13+
p_a = find(a)
14+
p_b = find(b)
15+
16+
if p_a > p_b: # ๊ฐ’์ด ๋” ์ž‘์€ ์ชฝ์„ ๋ถ€๋ชจ๋กœ ์„ค์ •
17+
parent[p_a] = p_b
18+
else:
19+
parent[p_b] = p_a
20+
21+
# Find ์—ฐ์‚ฐ(๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜)
22+
def find(a):
23+
if a != parent[a]:
24+
parent[a] = find(parent[a]) # ๊ฒฝ๋กœ ์••์ถ•
25+
return parent[a]
26+
27+
# ์—ฐ์‚ฐ ์ˆ˜ํ–‰
28+
n, m = map(int, input().split())
29+
parent = [i for i in range(n + 1)] # ์ดˆ๊ธฐ: ๊ฐ ์›์†Œ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋ถ€๋ชจ๋กœ ๊ฐ€์ง
30+
31+
for _ in range(m):
32+
flag, a, b = map(int, input().split())
33+
if flag == 0: # ํ•ฉ์ง‘ํ•ฉ ์—ฐ์‚ฐ
34+
union(a, b)
35+
else: # ๊ฐ™์€ ์ง‘ํ•ฉ ํ™•์ธ ์—ฐ์‚ฐ
36+
if find(a) == find(b):
37+
print("YES")
38+
else:
39+
print("NO")
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import sys
2+
import heapq
3+
input = sys.stdin.readline
4+
5+
n = int(input())
6+
heap = []
7+
8+
while n > 0:
9+
num = int(input())
10+
n -= 1
11+
if num == 0:
12+
if len(heap) == 0:
13+
print(0)
14+
continue
15+
print(-heapq.heappop(heap))
16+
else:
17+
heapq.heappush(heap, -num)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
import heapq
3+
input = sys.stdin.readline
4+
5+
n = int(input())
6+
abs_heap = []
7+
8+
for _ in range(n):
9+
num = int(input())
10+
if num == 0:
11+
if abs_heap:
12+
print(heapq.heappop(abs_heap)[1])
13+
else:
14+
print(0)
15+
else:
16+
heapq.heappush(abs_heap, (abs(num), num))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import sys
2+
import heapq
3+
input = sys.stdin.readline
4+
5+
n = int(input())
6+
heap = []
7+
8+
for _ in range(n):
9+
num = int(input())
10+
n -= 1
11+
if num == 0:
12+
if len(heap) == 0:
13+
print(0)
14+
continue
15+
print(heapq.heappop(heap))
16+
else:
17+
heapq.heappush(heap, num)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import sys
2+
sys.setrecursionlimit(10 ** 6) # ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ ๋Š˜๋ฆฌ๊ธฐ
3+
input = sys.stdin.readline
4+
5+
# Union ์—ฐ์‚ฐ(๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์น˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜)
6+
def union(a, b):
7+
p_a = find(a)
8+
p_b = find(b)
9+
10+
if p_a > p_b: # ๊ฐ’์ด ๋” ์ž‘์€ ์ชฝ์„ ๋ถ€๋ชจ๋กœ ์„ค์ •
11+
parent[p_a] = p_b
12+
else:
13+
parent[p_b] = p_a
14+
15+
# Find ์—ฐ์‚ฐ(๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜)
16+
def find(a):
17+
if a != parent[a]:
18+
parent[a] = find(parent[a]) # ๊ฒฝ๋กœ ์••์ถ•
19+
return parent[a]
20+
21+
# ์—ฐ์‚ฐ ์ˆ˜ํ–‰
22+
n, m = map(int, input().split())
23+
parent = [i for i in range(n + 1)] # ์ดˆ๊ธฐ: ๊ฐ ์›์†Œ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋ถ€๋ชจ๋กœ ๊ฐ€์ง
24+
25+
for _ in range(m):
26+
flag, a, b = map(int, input().split())
27+
if flag == 0: # ํ•ฉ์ง‘ํ•ฉ ์—ฐ์‚ฐ
28+
union(a, b)
29+
else: # ๊ฐ™์€ ์ง‘ํ•ฉ ํ™•์ธ ์—ฐ์‚ฐ
30+
if find(a) == find(b):
31+
print("YES")
32+
else:
33+
print("NO")
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys
2+
sys.setrecursionlimit(10 ** 8)
3+
input = sys.stdin.readline
4+
5+
def union(a, b):
6+
p_a = find(a)
7+
p_b = find(b)
8+
9+
if p_a > p_b: # a์˜ ๋Œ€ํ‘œ๋ณด๋‹ค b์˜ ๋Œ€ํ‘œ๊ฐ€ ๋” ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉด,
10+
parent[p_a] = p_b # a๊ฐ€ ์†ํ•œ ์ง‘ํ•ฉ์„ b์˜ ์ง‘ํ•ฉ์— ํ•ฉ์น˜๊ธฐ
11+
else:
12+
parent[p_b] = p_a # ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด b์˜ ์ง‘ํ•ฉ์„ a์˜ ์ง‘ํ•ฉ์— ํ•ฉ์น˜๊ธฐ
13+
14+
def find(a):
15+
if a == parent[a]: # a๊ฐ€ ์ž๊ธฐ ์ž์‹ ์˜ ๋ถ€๋ชจ์ด๋ฉด ๋Œ€ํ‘œ ๋…ธ๋“œ
16+
return a
17+
18+
parent[a] = find(parent[a]) # ๊ฒฝ๋กœ ์••์ถ•์„ ํ†ตํ•ด a์˜ ๋ถ€๋ชจ๋ฅผ ๋Œ€ํ‘œ ๋…ธ๋“œ๋กœ ์žฌ์„ค์ •
19+
return parent[a]
20+
21+
# ๋„์‹œ์˜ ๊ฐœ์ˆ˜ n๊ณผ ์—ฌํ–‰ ๊ณ„ํš์— ํฌํ•จ๋œ ๋„์‹œ์˜ ์ˆ˜ m์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
22+
n = int(input())
23+
m = int(input())
24+
25+
parent = [i for i in range(n)] # ๊ฐ ๋„์‹œ๋Š” ์ฒ˜์Œ์— ์ž๊ธฐ ์ž์‹ ์ด ๋Œ€ํ‘œ ๋…ธ๋“œ.
26+
27+
# n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋„์‹œ ๊ฐ„ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด union ์—ฐ์‚ฐ ์ˆ˜ํ–‰
28+
for i in range(n):
29+
arr = list(map(int, input().split()))
30+
for j in range(n):
31+
if arr[j]: # 1์ด๋ฉด i์™€ j๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ union ์—ฐ์‚ฐ ์ˆ˜ํ–‰
32+
union(i, j)
33+
34+
# ์—ฌํ–‰ ๊ณ„ํš์„ ์ž…๋ ฅ
35+
plan = list(map(int, input().split()))
36+
result = "YES"
37+
# ์—ฌํ–‰ ๊ณ„ํš์— ์žˆ๋Š” ๋ชจ๋“  ๋„์‹œ๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ(๋Œ€ํ‘œ ๋…ธ๋“œ)์„ ๊ฐ€์ง€๋Š”์ง€ ํ™•์ธ
38+
for i in range(1, m):
39+
if parent[plan[i]-1] != parent[plan[0]-1]:
40+
result = "NO"
41+
break
42+
43+
print(result)

0 commit comments

Comments
ย (0)