https://www.acmicpc.net/problem/1774
1774๋ฒ: ์ฐ์ฃผ์ ๊ณผ์ ๊ต๊ฐ
(1,1) (3,1) (2,3) (4,3) ์ด๋ ๊ฒ ์ฐ์ฃผ์ ๋ค๊ณผ ํฉ์ ์์จ์ ์ขํ๊ฐ ์ฃผ์ด์ก๊ณ 1๋ฒํ๊ณ 4๋ฒ์ด ์ฐ๊ฒฐ๋์ด ์๋ค. ๊ทธ๋ ๋ค๋ฉด 1๋ฒํ๊ณ 2๋ฒ์ ์๋ ํต๋ก๋ฅผ ๋ง๋ค๊ณ 3๋ฒํ๊ณ 4๋ฒ์ ์๋ ํต๋ก๋ฅผ ๋ง๋ค๋ฉด ์ ๋ค๊ณผ ์ ์์จ๋ผ
www.acmicpc.net
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์์ ์ด๋ฏธ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐํด์ฃผ๊ณ
๋ ธ๋๋ค์ ๊ฐ์ ์ ์ง์ ์ ์ํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ ๋ค
์ฒ์ ์๊ฐํ๋ ๊ฑด
์ด๋ฏธ ์ฐ๊ฒฐ๋ ํต๋ก๋ค์ ๋ฐ๋ก ์ ์ฅํ๊ณ ํฉ์น ํ
๊ทธ ํต๋ก๋ค์ ๋นผ๊ณ ๊ฐ์ ๋ค์ ๋ชจ๋ ๋๋ฉด์ unionํ๋ ๊ฑฐ์๋๋ฐ
์๊ฐ ์ด๊ณผ๊ฐ ๋ด๋คใ
def find(parent, x):
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, a, b):
a = find(parent, a)
b = find(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
n, m = map(int, input().split())
parent = [0] * (n+1) # ๋ถ๋ชจ ๋
ธ๋ ์ ์ฅ
for i in range(1, n+1):
parent[i] = i
space = [0] # ์ฐ์ฃผ์ ๋ค์ ์ขํ
for _ in range(n):
x, y = map(int, input().split())
space.append((x, y))
path = [] # ์ด๋ฏธ ์ฐ๊ฒฐ๋ ํต๋ก
for _ in range(m):
a, b = map(int, input().split())
union(parent, a, b)
path.append((a, b))
path.append((b, a))
edges = [] # ๋ชจ๋ ๋
ธ๋๋ค์ ๊ฐ์
for i in range(1, n+1):
for j in range(1, n+1):
if i != j and (i, j) not in path:
x1 = space[i][0]
y1 = space[i][1]
x2 = space[j][0]
y2 = space[j][1]
c = ((x2-x1)**2 + (y2-y1)**2) ** (1/2)
edges.append((c, i, j))
edges.sort()
res = 0
for i in edges:
c, a, b = i
if find(parent, a) != find(parent, b):
union(parent, a, b)
res += c
print(f'{res:.2f}') # ์์์ ๋์งธ์๋ฆฌ๊น์ง ์ถ๋ ฅ
๊ทธ ํ ์๊ฐ์ด ์์ด์ ๊ทธ๋๋ก ๋ฎ์๋ค๊ฐ
3์ผ์ด ์ง๋ ์ค๋,,, ๋ค์ ์ฝ๋๋ฅผ ์ข ์ดํด๋ณด๋ค๊ฐ
path๊ฐ ์์ด๋ ๋์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด์ด์ ์์ path ๋ถ๋ถ์ ์ง์๋ฒ๋ ธ๋ค ใ
def find(parent, x):
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, a, b):
a = find(parent, a)
b = find(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
n, m = map(int, input().split())
parent = [0] * (n+1) # ๋ถ๋ชจ ๋
ธ๋ ์ ์ฅ
for i in range(1, n+1):
parent[i] = i
space = [0] # ์ฐ์ฃผ์ ๋ค์ ์ขํ
for _ in range(n):
x, y = map(int, input().split())
space.append((x, y))
for _ in range(m):
a, b = map(int, input().split())
union(parent, a, b)
edges = [] # ๋ชจ๋ ๋
ธ๋๋ค์ ๊ฐ์
for i in range(1, n+1):
for j in range(1, n+1):
x1 = space[i][0]
y1 = space[i][1]
x2 = space[j][0]
y2 = space[j][1]
c = ((x2-x1)**2 + (y2-y1)**2) ** (1/2)
edges.append((c, i, j))
edges.sort()
res = 0
for i in edges:
c, a, b = i
if find(parent, a) != find(parent, b):
union(parent, a, b)
res += c
print(f'{res:.2f}') # ์์์ ๋์งธ์๋ฆฌ๊น์ง ์ถ๋ ฅ

'๐ค > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2252: ์ค ์ธ์ฐ๊ธฐ (Python) (0) | 2022.08.05 |
---|---|
๋ฐฑ์ค 2887: ํ์ฑ ํฐ๋ (Python) (0) | 2022.08.04 |
๋ฐฑ์ค 1197: ์ต์ ์คํจ๋ ํธ๋ฆฌ (Python) (0) | 2022.07.29 |
๋ฐฑ์ค 4195: ์น๊ตฌ ๋คํธ์ํฌ (Python) (0) | 2022.07.28 |
๋ฐฑ์ค 1976: ์ฌํ ๊ฐ์ (Python) (0) | 2022.07.28 |