미국에서 비만의 유행에 대해들은 후, 농부 존은 더 운동을 자신의 소를 원하는, 그래서 그는 자신의 소를 실행하기위한 소 마라톤을 만들기 위해 최선을 다하고있다. 마라톤 경로 농장의 쌍 사이의 도로의 시퀀스로 이루어진 경로를 포함한다. FJ는 가능한 한 많은 운동을 얻기 위해 소를 원부터 그는 (두 농장 사이의 경로에 도로의 총 길이로 측정 된 거리) 서로 떨어져 멀리있는 그의지도에있는 두 개의 농장을 찾기를 원한다. 그 농장이 멀리 쌍 사이의 거리를 결정하는 데 도움을줍니다.
입력
* 라인 1 ..... "탐색 악몽"과 동일 입력 형식.
산출
* 라인 1 : 농장의 가장 먼 쌍 사이의 거리를 표시하는 정수.
샘플 입력
7 6 1 6 E 13 6 3 9 E 3 5 7 S (4) 1 내지 3 N 2 4 20 W 4-7 S 2
샘플 출력
(52)
힌트
최장 마라톤 도로 4 팜 1 내지 5, 6, 3을 통해 팜 2에서 운영 및 길이 20 + 3 + 9 + 13 + 7 = 52이다.
가장 먼 지점 DFS 기록에 어떤 점에서 성과는, 발견
그리고 처음부터 가장 먼 지점에서 DFS는 가장 먼 지점 직경 때까지
사용법 #include <iostream> #INCLUDE <cstdio> #INCLUDE <벡터> 네임 스페이스를 사용하여 표준; CONST의 INT maxn 1E5 + = 10; INT 맥스 = 0; INT의 P; 구조체 노드 { INT의 Y; INT 렌; 노드 (INT 증가한, INT lenn) { Y = YY 렌 = lenn; } }; 벡터 <노드> S [maxn]; 보이드 DFS는 (U에서 INT INT FA, INT DIS) { 대해 INT (I = 0; i가 S를 <[U] 크기는 (); 나는 ++) { INT 브이가 S [U] [I] .Y; INT LEN = S [U] [I] .LEN; (V == FA)를 계속하는 경우; DFS (V, U, DIS LEN +); } 경우 (DIS> 맥스) { 맥스 = DIS, p = U; } } INT의 main () { INT의 N, m; 동안 (~는 scanf ( "% d 개 %의 D", 및 N, m)) { {위해 (; 나는 m <I ++는 I = 0 INT) A, B, C에서 INT; 숯 D; scanf와 ( "% D % D % D % C '& A, B, C, D); S [A] .push_back (노드 (b, c)); S [B] .push_back (노드 (A, C)); } DFS (1,1,0); 맥스 = 0; DFS (P, P, 0); 의 printf ( "% D \ 없음"맥스); } 0을 반환; }