Диаметр заголовка шаблона дерева
После того, как мы продолжаем рисовать на этом графике (дерево) один раз в глубину, определить sum1 сказал своему сыну пойти длинный путь от текущего узла является число, sum2 указать, сколько раз длинный путь. Сначала мы с длиной время пути тока + sum1 ток пути к узлу текущего обновления узла sum2, если обновление sum2 больше sum1, то мы поменяем их значение, это не трудно найти правильную, после завершения расчета нам отец текущего узла вернулся к sum1, поэтому после того, как анс ответ макс (sum1 + sum2), этот алгоритм будет проходить каждую точку снова, таким образом, время сложность O (п).
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstdio> 3 #include <CString> 4 #include <Алгоритм> 5 с использованием пространства имен станд; 6 ЬурейеЕ долго долго LL; 7 INT п, м; 8 структуры край { 9 INT дальше, чтобы, дис; 10 } а [ 100010 << 1 ]; 11 INT Num, глава [ 100010 << 1 ]; 12 INT F [ 100010 ], ANS; 13 недействительнымдобавить ( Int из , Int к, INT DIS) { 14 а [++ Num] = .next головы [ от ]; 15 а [число] .to = к; 16 а [Num] .dis = дис; 17 головки [ от ] = Num; 18 } 19 INT ДФС ( INT и, INT метрономы) { 20 INT sum1 = 0 , sum2 = 0 ; 21 для ( INT I = голову [и], я, я = а [я] .next) 22 , если ! (А [я] .чтобы =FA) { 23 sum2 = макс (sum2, поиск в глубину (а [я] .to, и) + а [я] .dis); 24 , если (sum2> sum1) подкачки (sum1, sum2); 25 ANS = макс (ANS, sum1 + sum2); 26 } 27 вернуться sum1; 28 } 29 INT основных () { 30 зсапЕ ( " % d% d " , & п, & м); 31 для ( INT I = 1 ; я <= т; я ++ ) { 32 обугленных с; 33 INT х, у, г; 34 CIN >> х >> у >> г >>с; 35 добавить (х, у, г); 36 добавить (у, х, г); 37 } 38 ДФС ( 1 , 0 ); 39 Е ( " % d \ п " , ANS); 40 возвращения 0 ; 41 }