木の直径を求める
頂点数 v
の木が与えられており、あなたのタスクはこの木の直径を求めることです。直径とは、最も離れている2つの頂点間を結ぶパスの長さを指します。
入力
最初の行には単一の整数 v
(1 ≤ v ≤ 100000) が与えられます。
続く v-1
行には、それぞれ整数 v1
, v2
(1 ≤ v1, v2 ≤ v) がペアで与えられます。これは頂点 v1
と頂点 v2
が互いにつながっていることを意味します。
出力
与えられた木の直径を出力してください。
例
入力 | 出力 |
---|---|
3 1 2 1 3 | 2 |
5 1 2 1 3 3 4 3 5 | 3 |
Hint 1
異なる頂点を始点として、複数回DFSを実行できます。
Hint 2
まずノード1を始点としてDFSを行い、最も遠い頂点を見つけてください(木にはサイクルがないため、BFSなしでも可能です)。
その後、見つけた頂点を始点にもう一度DFSを行い、さらに遠い頂点を探すことで、木の直径を求めることができます。
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB