題目描述已知有一棵有根樹,樹的形態未知,但是已知樹的最大深度爲D,並且深度爲i的結點有Ci個(1≤i ≤D)。求在所有可能的樹中, 直徑最長的樹的直徑是多少?
輸入格式
第1行:1個整數D,表示最大的深度第2行:D個整數,表示Ci輸入數據保證存在至少一棵可能的樹。
輸出格式
第1行:1個整數,表示答案。
輸入樣例
22 2
輸出樣例
4
題解
若樹的一種深度d的點數>1,那麼直徑至少爲d*2;
若點數=1,那就算出以其爲根的樹的直徑d1,再算出其高度與之前算出的長度之和d2,取大值。
#include<cstdio> #include<algorithm> using namespace std; const int N=1e5+5; int D, C[N]; int DFS( int d ) { int l=0; while( C[++d]>=2 ) l+=2; if( d<=D ) l=max( l+D-d+1, DFS(d) ); return l; } int main() { scanf( "%d", &D ); for( int i=1; i<=D; i++ ) scanf( "%d", &C[i] ); printf( "%d\n", DFS(0) ); return 0; }
[NOIP模擬賽]樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.