폭발 뒤에 시험 정신. . . 나는 T2의 단지 2 시간 급하게 속임수 포인트라고, 멀리 false의 발생됩니다 발견
T1과는 m = 0의 탐색 할
주로 많은으로 나누어, T3를 할 첫 번째는 일부는 언뜻 87 분 (블라인드)이 있었다는 것을 발견했다.
나중에 생각은, 69 점을 체인을 느끼지 않는다
2.6s를 실행 발견 된 두 번째 테스트 조금 큰 샘플, 69 포인트의 코드 후, 폭발의 정신은 47 득점 것으로 예상된다
22 포인트, 69 포인트를 얻을 수있는 4000 포인트 후.
rk3에 T3 군웅와 그래서 성공
T1.
포함 및 제외 밖에 생각하지 않은 시험의 생각 포함 - 배제를 발견하는 방법에 대해 생각 된 시험에서 좋은 질문입니다.
정답은 포함 배제 에지이다.
T2.
오일러
T3.
컷 69 점으로 0.5 시간, 완전히 아이디어와 긍정적 인 솔루션을 다른 시험, 말을 좋아합니다.
얼굴 형과 긍정적 인 솔루션은 전체 방정식의 해결은, 사실,이 공식은 두 나무 사이의 거리의 제곱이며, 그래서 우리는 대답 각 지점의 기여도를 고려할 수 단순화하는 것입니다.
아들의 대답에 아버지 전송하는 방법 트리 DP를 고려
우리는 알이 [I] 모든 포인트 나 거리를 서브 트리를 나타내고, ANS [I]의 제곱의 합, SIZ [I]가 승, 하위 트리의 크기를 나타낸다에서 I에 서브 트리 모든 지점을 의미 할 [I] 아버지에서 난을 나타냅니다.
그런 다음이
세 [전] + = 년 [I] + 2 * A [I] * W [I] + w [i]는 * W [I] * SIZ [Y]
에서 [FA] + =에서 [I]에서 SIZ + [I] * W [i]를
그래서 우리는 [1], 우리는 우리가 O (N)의 복잡도 솔루션을 찾을 수 있으며, 상기 식에 의해 루트를 변경할 수있다 ans와 주문
O (NQ), 큰 정수의 총 복잡도는 코드 달성하기 매우 간단하다.
1 #INCLUDE <. 비트 / stdc ++ H> 2 #DEFINE 개조 1,000,000,007 3 #DEFINE 줄게 긴 길이 4 이용한 스페이스 성병; 5 인라인 판독 LL () { 6 INT (X) = 0 ; 7 숯 CH = getchar가 (); 8 동안 (CH2 < ' 0 ' || CH> ' 9 ' ) CH = getchar가 (); 9 일 동안 (CH2> = ' 0 ' && CH <=에서 ' 9 ' ) (X) = (X << 3 ) + (X <<1 ) + CH- 48 , CH = getchar가 (); 10 창은 X; 11 } 12 INT의 N [F 100005 ], 인터넷 [ 100005 ], [ 100005 ], 그래서 [ 100005 ], TOT, SB, Q; 13 LL의 SIZ [ 100005 ] 등 [ 100005 ], 팽 [ 100005 ] ANS, NI, [w 100005 ]; 14 인라인 공극 추가 ( INT의 X, INT의 Y) { 15 NE [++ TOT = Fi를 [X]; 16 파이 [X]는 = TOT 단계; (17) [TOT는] = y로; 18 } 19 무효 DFS ( INT의 X) { 20 SIZ [X] = 1 ; 알루미늄 [X] = 0 , 팽 [X] = 0 ; (21) 에 대한이 ( int로 I = Fi를 [X] I, I = NE [I]) { 22 INT의 Y = [I]; 23 DFS (Y); 24 등 [X] = (알 [X] 알 + [Y] + (SIZ [Y] * w [Y])) % 개조; 25 팽 [X] = (송곳니 [X] + 팽 [Y] + 등 [Y] * w [Y] * 2 + w [Y] * w [Y] %의 개조 * SIZ [Y]) % 개조; 26 SIZ [X] + = SIZ [Y]; 27 } 28 } 29 무효 DFS2 ( INT의 X)를 { 30 의 ANS = (ANS + 팽 [X]) % 개조; (31) 에 대한이 ( int로 I = Fi를 [X] I, I = NE [I]) { 32 INT의 Y = 내지 [I]; 33 LL의 FX = (송곳니 [X] 팽 [및] -at [및] * w [Y] * 2 -w [Y] * [y]는 개조 *의 %의 SIZ [및] w) %의 개조, 34 X = 합니다 ([X] -at [및] - (SIZ [Y] * w [및])) % 개조; 35 팽 [Y] = (송곳니 [및] + FX AX + w * [Y] * 2 + w [Y] * w [Y] * %의 개조 (N- SIZ [및])) % 개조; 36 [Y] =에 (*)에서 [및] + AX + (N-SIZ [및] w [Y]) % 개조; 37 DFS2 (Y); (38) } 39 } 40 INT 의 main () { 41 개 의 Sb = read ()를 N =, = Q) (판독 ) (판독; 42 NI = 50,000,004 ; (43) 에 대한이 ( int로 I = 2 [I] (판독 F = [I] = W) 내가 ++; i가 N = <) (판독, 추가) (F [i]는, I); 44 DFS ( 1 ); 45 DFS2 ( 1 ); 46 의 printf ( " % LLD \ 없음 " (ANS + 모드) % 개조 * NI % 개조); (47) 동안 (q-- ) { 48 INT U = ) (판독; 49 LL 광고 = ) (읽기; 50 [유] = (w [U] + AD) w %의 모드; 51 DFS ( 1 ); 52 ANS = 0 ; 53 DFS2 ( 1 ); 54 의 printf ( " % LLD \ 없음 " (ANS + 모드) % 개조 * NI % 개조); 55 } 56 반환 0 ; 57 }
긍정적 인 해결책은을 끈적 거리는되지 않습니다