DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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​