白駿18126アライグマ九九(with Python)
何の問題ですか。
タイトルの質問^^
作成したソリューション
木の概念を利用して解答した.
問題の思考点
この図では、ループのツリー構造が現れない...!(2,3,4,5ノードを移動しても、ループ構造は作成できません.)
最後に、少し考えてみれば、Leaf Nodeに着くたびに、最大値を更新することができます.(ノード間の距離はすべて整数であるため、最末端のノードの1つが入口から最も遠くなければならない.)
では、leafノードであることをどのように知っていますか?
スタック内のノードを取り出すたびに、アクセスチェックが行われます.
leaf node:続行できるnodeはありません.
leaf node以外のnode:少なくとも1つのノードがアクセスできます.
コード実装
N = int(input())
adj = [[] for _ in range(N+1)]
# 각 노드에서 갈 수 있는 노드를 모두 저장합니다.
for i in range(N-1):
n1, n2, l = map(int, input().split())
adj[n1].append([n2, l])
adj[n2].append([n1, l])
visited = [0] * (N+1)
# 재귀 깊이 때문에 python 내에서 스택을 선언했습니다.
# (시스템 스택 사용 X)
stack = [[1, 0]]
result = 0
while stack:
v, l = stack.pop()
visited[v] = 1
# leaf node 인지 판별
flag = False
# 현재 v 노드가 갈 수 있는 곳이 한곳이라도 있다면 leaf 노드가 아닙니다.
for tmpv, tmpl in adj[v]:
if visited[tmpv] == 0:
flag = True
# leaf node가 아닌 경우, 스택에 저장합니다.
if flag == True:
if adj[v]:
for nv, nl in adj[v]:
if visited[nv] == 0:
stack.append([nv, l+nl])
# leaf node인 경우, 최대값을 갱신해 줍니다.
else:
if l > result:
result = l
print(result)
Reference
この問題について(白駿18126アライグマ九九(with Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@daeungdaeung/백준-18126-너구리구구テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol