コード:
// luogu-判定部イネーブル-O2 の#include <キュー> の#include <cstdioを> する#include <アルゴリズム> の#define N 1000005 の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN) 名前空間を使用してSTD; キュー<整数> Q; 整数nは、エッジ。 INTは゜[N]、HD [N << 1]、NEX [N << 1]、NUM [N]、DEP [N]、VISの[N]、[N]。 ボイド追加(INT U、V INT) { NEX [++エッジ] = HD [U]、HD [U] =縁、[エッジ]へ= V。 } )(メインINT { I、J、L int型。 // setIO( "入力"); scanf関数( "%dの%のD"、&N、&L)。 用(i = 1; iがn <; ++ I) { int型、B。 scanf関数( "%d個の%d個"、& } のための(I = 1。 (!q.empty())、一方 { int型、U = q.front(); q.pop()。 以下のために(INT I = HD [U]; I; I = NEX [I]) { IF(VIS [する[I]]!) { --deg [する[I]]。 (DEG <= 1 [I]乃至])場合 VIS = DEP [U] + 1、q.push([I]へ)[I]乃至] = 1、DEP [I]に]。 } } } (i = 1; iが<= N; I ++)用++ NUM [DEP [I]]。 int型ANS = 0; 用(i = 0; iが<= N; I ++) ANS + =分(2 * L、NUM [I])。 printf( "%d個の\ n"、ANS)。 0を返します。 }