[リンク]ゲームhttp://59.61.75.5:8018/contest/218
そしてA.
[タイトル]イタリア
ツリーの$ $ A n点は、それぞれ、$ N-1 $縁を有し、$(U_1、V_1)、(U_2、V_2)、\ cdots、(U_ {N-1}、V_ {N-1} )$まず、各点のU $ $は、$ S_U = \ {U \} $が設定されています。
そこ$ M $操作、$ I $ $所与$ P_I、$ S_ {U_ {P_I}} $と$ S_ {V_ {P_I}}の動作それらに割り当て$と。
すべての操作が完了した後、すべての$ I \にあるため、[1、n]は$、$ I $の要求は、セットの数が含まれています。
データ範囲[] $ N、M \ル5 \回10 ^ 5 $。
[説明]
それがカウントされる際に各ポイントを考えてみましょう。明らかに、各ブロックは、その通信動作に影響を与え備えます。逆順処理における操作、統計]をクリックします。
効率$ O(M + N)$。期待はスコア:100。
[コード]
1の#include <ビット/ STDC ++ H> 2 整数 N、M、U [ 500010 ]、V [ 500010 ]、[S 500010 ]、ヴァル[ 500010 ]、Q [ 500010を]。 3 )(主符号付き 4 { 5 のscanfを(" %D%D "、&N、&M)。 6 用(INT iは= 1 ; iは<N; I ++)scanf関数は(" %D%D "、およびU [i]は、&V [I])。 7 のための(INT iが= 1 ; iが<= N; iが++)S [I] = 1 。 8 以下のために(INT iが= 1 ; I <= M; I ++)のscanf(" %dの"、&Q [I])。 9 用(INT X = Q [i]は、S [U [X] = S [V [X] = S [U [X] + S [V; I i-- I = M、X) [X]] -ヴァル[X]、ヴァル[X] = S [U [X]]。 10 のために(INT iは= 1 ; iが<= N; I ++)のprintf(" %D%C "、S [i]は、" \ n " [I == N])。 11 リターン 0 ; 12 }
C.管理
[タイトル]イタリア
物品の$ $ N行目は、最初の記事は、正確$ K $の空でない部分にそれを破る、Iを$ a_iをの$ $正しい値を$、および同じセグメント内a_iを$ $ $同じタプル(Iそう、j)はできるだけわずか$。すなわち、それは価値$ $ $ I $ J物品の右セグメントに想定されるが$ C(i、j)は$番目を有し、最小限ください$ \和\ limits_ ^ K \和\ limits_ {{iが= 1} J} \ binom {C(i、j)は} {2} $。
数据范围】【$ 2 \ N \ 10 ^ 5 \ 1 \とK \と\分\ {N、20 \}、\ 1 \及びa_iを\ N $。
[説明]
$ DP $を考えてみましょう。提供$ fは、[I] [J] $ $ I $が正面を表すセグメント$ K $の最小数に分割されます。あり:[I] [J] = \分\ limits_ {0 \当量のK <I}(F [k]は[J-1] + W(K + 1、i))を$ F $は。
$ K $、小さいので、$ K $のために、それはすなわち、$ J $の各層の転送、スライスには明らかであろう。
プレイテーブルには、意思決定の単調を有することが判明しました。私たちは、分割統治の単調さと意思決定プロセスを検討し、ポインタまたは単調キューで特定の状況を維持することはできません。
(L、R)$ W $を計算する方法を考えてみましょう。$(L-1、R)$位置等W $にプッシュ(L、R)W $から明らかになるであろう。そのため、同様のMOのチームアプローチを維持します。
効率O(NK \ログn)を$ $。期待はスコア:100。
1の#include <ビット/ STDC ++ H> 2 CONST 長い 長 INF = 1LL << 60 。 3 INT N、K、CNT [ 100010 ]、[ 100010 ]、PL、PR。 4 長い 長い F [ 100010 ] [ 22 ]、RES。 5インラインボイドイン(int型のx、int型 V){RES- = 1LL * CNT [X] *(CNT [X] - 1)/ 2 ; CNT [X] + = V; RES + = 1LL * CNT [X] * (CNT [X] - 1)/ 2 。} 6インラインボイド(解決int型 L、INTの R、INT L、INT R、int型K) 7 { 8 INT半ば=(L + R)>> 1 。 9 一方(PL> L + 1)イン([ - PL]、1 )。 10 一方(PR <MID)イン([++ PR]、1 )。 11 一方(PL <L + 1)イン([PL ++] - 1 )。 12 一方(PR> MID)イン([PR - ]、 - 1 )。 13 INT P = L。長い 長い ANS = [L] F [K- 1 ] + RES。 14 一方(PL <=ミッドおよびPL <= R + 1 ) 15 { 16 であれば(F [PL- 1 ] [K- 1 ] + RES <= ANS)ANS = F [PL- 1 ] [K- 1 ] + RES、P = PL- 1 。 17 イン([PL ++] - 1 )。 18 } 19 F [中間] [K] = ANS。 20 であれば(L <=半ば1(L、ミッド解決)1 、L、P、K)。 21 であれば(MID + 1 <= r)と(MID +解決1 、R、P、R、k)を、 22 } 23 署名されたmain()の 24 { 25 のscanf(" %D%D "、&N&K)。 26 のために(INT iは= 1 ; iが<= N; I ++)のscanf(" %dの"、および[I])。 27 のために(INT iは= 0 ; iが<= N; I ++)のための(INT J = 0 ; J <= K; J ++)Fを[I] [J] = INF。 28 F [ 0 ] [ 0 ] = 0 ; 29 のための(int型 J = 1; J <= K; J ++ ) 30 { 31の RES = 0 ; PL = 1 ; PR = N。 32 のために(INT iは= 1 ; iが<= N; I ++)CNT [I] = 0 ; 33 のために(INT iは= 1 ; I <= N; I ++)イン([I]、1 ); 図34は、 (解決1、nは、0、N- 1 、j)を、 35 } 36 リターンのprintf(!" %のLLD \ n " 、F [N] [K])。 37 }