DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Finding Triangular Stars

返回题目

题解

정점 vvv를 가운데 정점으로 고정하자. vvv와 인접한 각 방향으로 얼마나 멀리 뻗어 나갈 수 있는지를 생각한다.

어떤 방향으로 뻗어 나갈 수 있는 최대 길이를 그 방향의 길이라고 하자. 정점 vvv를 가운데 정점으로 하는 크기 KKK의 삼각별이 존재하려면, 길이가 KKK 이상인 방향이 적어도 333개 있어야 한다. 따라서 정점 vvv에서 가능한 가장 큰 삼각별의 크기는 vvv에서의 방향 길이들 중 세 번째로 큰 값이다.

이 값을 모든 정점에 대해 구하면 된다. 트리를 임의로 루트 잡고, 아래 방향 DP와 위 방향 DP를 한다.

downvdown_vdownv​를 vvv의 자식 방향으로 내려가서 도달할 수 있는 가장 먼 거리라고 하자. 이는 후위 순회로 구할 수 있다.

그 후 upvup_vupv​를 vvv에서 부모 방향으로 갔을 때 도달할 수 있는 가장 먼 거리라고 하자. 정점 vvv에서 자식 uuu로 upuup_u를 넘겨 줄 때는, 에서 방향을 제외한 다른 방향들 중 가장 긴 값을 사용하면 된다.

각 정점에서 자식 방향들의 길이 downu+1down_u+1downu​+1과, 루트가 아닌 경우 부모 방향의 길이 upvup_vupv​를 모아 상위 33개를 관리한다. 세 번째로 큰 값이 라면, 정점 는 크기 의 삼각별을 각각 하나씩 만든다.

마지막으로 차분 배열을 이용해 모든 vvv에 대해 구간 [1,Lv][1,L_v][1,Lv​]에 111을 더하면 답을 얻을 수 있다.

시간 복잡도는 O(N)O(N)O(N), 메모리 복잡도는 O(N)O(N)O(N)이다.

u
pu​
vvv
uuu
3
LvL_vLv​
vvv
1,2,…,Lv1,2,\ldots,L_v1,2,…,Lv​