https://www.luogu.org/problem/P3806
#include <ビット/ STDC ++ H.>
使用して 名前空間STD;
のconst int型 MAXN = 2E4 + 10 ;
int型のヘッド[MAXN]、版[MAXN]、NXT [MAXN]、エッジ[MAXN];
int型TOT;
int型 [MAXN] VISします。// 重心をマークするために使用されているパーティションが使用された場合
、INTのANS、サイズ[MAXN]、根、SUM;
// 重心を求めて使用し、ANS記録マークは、現在、最小サイズの木のフォーカス、サイズ記録サブツリーのサイズのルートであります重心のパーティションサブツリーの現在のサイズの和
// 地図<整数、整数> M;
int型の M [ 100000000 ]、MCNT、MM [MAXN]; // M [I]はルートに各子ノードをタグ付けするために使用しました距離iが存在する、またはTをクリアするために使用される場合、M個のMM
INT DIS [MAXN]、扁[MAXN]、CNT; // 各DIS現在の距離に[i]が記録サブルートノード、扁本記録から
INTQ [ 1005 ]、裁判官[ 1005 ];
int型N、K。
ボイド追加(int型のx、int型の Y、int型Z)
{
版[ ++ TOT = Y。
エッジ【TOT] = Z;
NXT [TOT] = 頭部[X]。
ヘッド[X] = TOT。
}
ボイド dfs_find(int型のx、int型 FA)// 求重心
{
サイズ[X] = 1 。
int型 max_part = 0 ;
以下のための(int型I =ヘッド[X]。私; I = NXT [I])
{
int型、Y = [I]版。
もし(Y == FA || VIS [Y])続けます。
dfs_find(Y、X)。
サイズ[X] + = サイズ[Y]。
max_part = MAX(max_part、サイズ[Y])。
}
max_part = MAX(max_part、sum- サイズ[X])。
もし(ANS> max_part)
{
ANS = max_part。
ルート =のX。
}
}
ボイド DFS(int型のx、int型FA)
{
扁[CNT ++] = ; DIS [X]
のための(int型 ; I; I =頭[X]をI = NXT [I])
{
int型 Y = 版[I];
IF(VIS [Y] FA == Y || )続行;
DIS [Y] =エッジ[I] + DIS [X];
DFS(Y、X);
}
}
ボイド(解決INT X)// 解決するパーティションサブツリーを、各時間重心サブツリーに。
{
MCNT = 0 ;
のための(int型 ; I I = I =頭[X]をNXT [I])
{
CNT = 0 ;
int型 Y =[i]の版。
DIS [Y] = エッジ[I]。
もし(VIS [Y])続けます。
DFS(Y、X)。
用(INT J = 1 ; J <= CNT; J ++ )
{
ための(int型、L = 1リットル++; L <= K )
であれば(Q [L] -bian [J]> = 0 &&(M [Q [L ] -bian [J]] == 1 || Q [L] == 扁[J]))
裁判官[L] = 1 。
}
のための(int型 J = 1 ; J <= CNT; J ++ )
{
M [扁[J] = 1 。
MM [ ++ MCNT] = 扁[J]。
}
}
のために(int型 I = 1 ; I <= MCNT; iは++ )
M [mmの[I] = 0 ;
}
ボイド除算(INT X)// 划分子树
{
VIS [X] = 1 。
(x)を解きます。
以下のために(int型 I =ヘッド[X]; I; I = NXT [I])
{
int型、Y = 版[I];
もし(VIS [Y])続行。
ANS =和= サイズ[Y]。
dfs_find(Y、0 );
除算(ルート)。
}
}
int型のmain()
{
scanf関数(" %D%dの"、&N&K)。
以下のために(int型 iは= 1 ; iが<= N- 1、I ++ )
{
int型、B、Cと、
scanf関数(" %D%D%D "、&、&B、&C)。
(A、B、C)を加えます。
(B、C)を追加します。
}
のための(INT I = 1; 私は= Kを<。I ++ )
のscanf(" %dの"、&Q [I])。
ANS =和= N。
dfs_find(1、0 );
除算(ルート)。
用(int型 i = 1 ; iが= Kを<; Iは++ )
{
場合(裁判官[i])とのprintf(" AYE \ n " );
他のprintf(" NAYの\ nを" );
}
}