【】 POJ1985 Корова Marathon

Диаметр заголовка шаблона дерева

После того, как мы продолжаем рисовать на этом графике (дерево) один раз в глубину, определить sum1 сказал своему сыну пойти длинный путь от текущего узла является число, sum2 указать, сколько раз длинный путь. Сначала мы с длиной время пути тока + sum1 ток пути к узлу текущего обновления узла sum2, если обновление sum2 больше sum1, то мы поменяем их значение, это не трудно найти правильную, после завершения расчета нам отец текущего узла вернулся к sum1, поэтому после того, как анс ответ макс (sum1 + sum2), этот алгоритм будет проходить каждую точку снова, таким образом, время сложность O (п).

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 }
AC код

 

рекомендация

отwww.cnblogs.com/shl-blog/p/10960990.html