practivceAlgorithm/백준
[백준][Python] 13418 학교탐방가기
findTheValue
2021. 8. 29. 16:42
유니온 파인드. 정순, 역순으로 오르막길 포함된 갯수 파악해서 연산.
import sys
input = sys.stdin.readline
def find(x):
if parent[x] == x:
return x
parent[x] = find(parent[x])
return parent[x]
def union(a,b):
a = find(a)
b = find(b)
if level[a] >= level[b]:
parent[b] = a
if level[a]==level[b]:
level[a] +=1
else:
parent[a] = b
N, M = map(int, input().split())
parent = {i:i for i in range(N+1)}
level = {i:0 for i in range(N+1)}
edges = []
for _ in range(M+1):
a, b, c = map(int, input().split())
edges.append([c,a,b])
edges.sort()
ascend = 0
for i in range(M+1):
cost, a, b = edges[i]
if find(a) != find(b):
union(a,b)
ascend += cost
parent = {i:i for i in range(N+1)}
level = {i:0 for i in range(N+1)}
decend = 0
for i in range(M,-1,-1):
cost, a, b = edges[i]
if find(a) != find(b):
union(a,b)
decend += cost
print((N-ascend)**2 - (N-decend)**2)