p5405 [CTS2019] криптона золото рука тур

С учетом эффекта

Смысл проблемы ерунды

Посмотрите западники- язык, чем смотреть на эту проблему сталкиваются с сильным

 анализ

Мы предполагаем, что это дерево дерево в

Тогда мы можем легко получить дп [х] [я] представляет идеи х деревьев и ожидания на I

Просто передать нужный размер и перечислить текущий суб-дерево до нужного размера

Однако, в связи с направлением края не обязательно

Таким образом, есть обратная сторона этого дерева

Мы можем включение и исключение сторона имеет я не властен

Таким образом, для обратной стороны правоотношения либо х плюс точка, суб-дерево изолированного вклада

Либо эта сторона считается незаконным

В этом случае мы можем внести свой вклад непосредственно потерять

Так как мы уже знаем, что этот вклад составляет от 0 до включения и исключения случае я

И это эквивалентно минус * -1

Вы можете заполнить включения-исключения

Сложность O (N ^ 2)

код

# include <бит / STDC ++ ч.>
 с использованием  пространства имен STD;
#define фи первый
 #define себе второй
 #define пб push_back
 #define т.пл make_pair
 Const  INT мод = 998244353 ;
INT дп [ 1100 ] [ 3300 ], п, т, INV [ 3300 ], [разрешение 3300 ], Siz [ 1100 ]; 
вектор <пара < INT , INT >> v [ 1100 ]; 
рядный INT PW ( INT х, INT р) {
     INTANS = 1 ;
    в то время как (р) {
       если (р & 1 ) ANS = 1LL * ANS * х% по модулю; 
      х = 1LL * х * х% по модулю; 
      р >> = 1 ; 
    } 
    Возврата ANS; 
} 
Инлайн пустот в глубину ( INT х, INT фа) { 
    Siz [х] = 1 ;
    для ( INT I = 0 ; я <V [X] .size (); я ++ )
       если (! v [х] [I] .fi = FA) {
           INT у = V [х] [I] .fi, г =  v [х] [I] .se;
          ДФС (у, х);
          для ( INT J = 0 ; J <= 3 * Siz [х]; j ++ )
             для ( INT к = 0 ; к <= 3 * Siz [у]; K ++ ) {
                 INT сумма = 1LL * дп [х] [у ] * дп [у] [к]% мод;
                если (г) Рез [J + K] = ([Рез J + K] +) сумма% по модулю;
                  остальное разреш [J + K] = ([Рез J + K] + -сумма MOD)% MOD, разреш [J] = (резисторные [J] + сумма)% по модулю; 
          } 
          Сиз [х] + = Siz [у];
          для ( INT J = 0 ; J <= 3* Siz [х]; j ++) дп [х] [J] = разреш [J], разреш [J] =0 ; 
      } 
    Для ( INT I = 0 ; я <= 3 * Siz [х]; я ++) дп [х] [I] = 1LL * дп [х] [г] * INV [я]% по модулю; 
} 
INT основных () {
     Int I, J, K, ANS = 0 ; 
    зсапЕ ( " % d " , & п);
    для (я = 1 ; г <= п; я ++ ) {
       INT х, у, г, внутривенно; 
      зсапЕ ( " % d% d% d " , & х, & у, & г); 
      IV = PW (х + у + г, mod - 2 ); 
      дп [я] [ 1 по модулю;] = 1LL * х * IV% 
      дп [I] [ 2 ] = 2LL * у * IV% по модулю; 
      дп [I] [ 3 ] = 3LL * г * IV% по модулю; 
    } 
    Для (я = 1 ; <п; я ++ ) {
       INT х, у; 
      зсапЕ ( " % d% d " , & х, & у); 
      v [х] .pb (тр (у, 1 )); 
      v [у] .pb (тр (х, 0 )); 
    } 
    INV [ 0 ] = INV [ 1 ] = 1 ;
    для (я = 2 ; г <= 3 * п; я ++) INV [I] = PW (я, mod - 2 ); 
    ДФС (1 , 0 );
    для (я = 0 ; г <= 3 * п; я ++) ANS = (ANS + дп [ 1 ] [I])% по модулю; 
    Е ( " % d \ п " , ANS);
    вернуться  0 ; 
}

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

отwww.cnblogs.com/yzxverygood/p/11519598.html