爆発の背後にある試験の考え方。。。私はT2のちょうど2時間は、その後、急いで呼ばチートポイントを偽捨てられました
T1は、であり、m = 0検索します
主に多くに分け、T3を行うことが最初はいくつかが、一目見ただけで87分(ブラインド)があったことがわかりました。
その後に考えたのは、チェーン、69ポイントを感じることはありません
2.6sを実行見出さ第二の試験少し大きなサンプル、69ポイントのアウトコードの後、爆発の考え方は、47のスコアが予想されます
22ポイント、69ポイントを獲得した4000ポイントの後。
RK3にT3剛とそれほど成功
T1。
包含と除外は良い質問です、テストに考え抜かれていない受験を考え、インクルージョン排除を発見する方法について考えてきました。
正解は包含排除エッジです。
T2。
オイラー
T3。
カット69ポイントで0.5時間、言いたい、アイデアと正のソリューションは完全に異なる試験。
フェイス兄と正の解は、全体の方程式の解決を簡素化することで、実際には、この式は、任意の2つのツリー間の距離の2乗であると私たちはその答えに、各ポイントの寄与を考慮することができます。
息子の答えに父から転送する方法、木のDPを考えてみましょう
[I] wは、我々は、アル[i]の二乗の和からiをiと、ANS [i]は、サブツリーを表す距離にすべての点が全ての点サブツリーを表し、SIZ [i]はサブツリーの大きさを示しします父から私を表現します。
そして、そこに
年[前] + =年間[I] + 2 * [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 MOD十億七 3 の#defineっ長い長い 4 使って 名前空間STDを、 5 インラインLLリード(){ 6 INT X = 0 。 7 チャー CH = GETCHAR()。 8 一方(CH < ' 0 ' || CH> ' 9 ')CH = GETCHAR()。 9 一方(CH> = ' 0 ' && CH <= ' 9 ')x =(x << 3)+(X <<1)+ CH- 48、CH = GETCHAR()。 10 リターンX。 11 } 12 INT nは、[F 100005 ]は、FI [ 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 Fiの[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] =(AL [X] +ら[Y] +(SIZ [Y] * W [Y]))%MOD。 25 牙[X] =(ファング[X] +牙[Y] +ら[Y] * W [Y] * 2 + W [Y] * W [Y]%MOD * SIZ [Y])%MOD。 26 SIZ [X] + = SIZ [Y]。 27 } 28 } 29 空隙 DFS2(INT X){ 30件 のANS =(ANS +ファング[X])%のMOD。 31 のためには、(int型 I = Fiが[X]; I; I = NE [I]){ 32 のint Y = 乃至[I]。 33 =(ファング[X]牙【と】-at [と] * W [Y] * LLのFX 2 -w [Y] * W [Y] MOD *%のSIZ [と])%のMOD、 34 X = ([X] -at [と] - (SIZ [Y] * W [かつ]))%MOD。 35 牙[Y] =(牙[と] + FX + AX * [Y] * W 2 + W [Y] * [Y] MOD *%(N-SIZ [と])W)%MOD。 36 [Y] =([Y] Wにおける[かつ] + AX +(N-SIZ [と])*)%のMOD。 37 DFS2(Y)。 38 } 39 } 40 INT メイン(){ 41は 、SB =読み取る()、N =(読み取り)、Q = 読み取り()。 42 NI = 50000004 。 43 のために(int型 I = 2 ; iが<= N; iが++)([I]読み取り= F)は、[I] = W )(読み取り、([i]は、I f)を加えます。 44の DFS(1 )。 45 DFS2(1 )。 46 のprintf(" %LLDする\ n "、(ANS + MOD)%MOD * NI%MOD)。 47 一方(q-- ){ 48 INT U = 読み取ります()。 49 LL広告が= 読んで(); 50 [U] =([U] +広告w)の重量%のMOD。 51の DFS(1 )。 52の ANS = 0 。 53 DFS2(1 )。 54 のprintf(" %LLDする\ n "、(ANS + MOD)%MOD * NI%MOD)。 55 } 56 リターン 0 。 57 }
正の解はグーません。