С учетом эффекта
Смысл проблемы ерунды
Посмотрите западники- язык, чем смотреть на эту проблему сталкиваются с сильным
анализ
Мы предполагаем, что это дерево дерево в
Тогда мы можем легко получить дп [х] [я] представляет идеи х деревьев и ожидания на 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 ;
}