CF D. Nauuoとサークル

https://codeforces.com/contest/1173/problem/D

質問の意味:

  あなた与えるツリーは、n個の点、〜nは1番のn点が含まれています。

  円与えられ、円は、n番目の位置、ツリー内のi番目のノードに対応する位置に配置され、かつ省略する。

  円形に削減ツリーを求めた後、その結果非交差エッジ実施形態の総数。

学習します。https://www.cnblogs.com/violet-acmer/p/10991346.html

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
const  int型のmod = 998244353 ;
const  int型 M = 2E5 + 5 構造体ノード{
     int型nextt、V。
} E [M << 1 ]。
ベクトル < 整数 > 息子[M];
int型のヘッド[M]、N、TOT。
LLのFAC [M]、DP [M]。
ボイド addedge(INT U、INT V){ 
    E [TOT] .V = V。
    E [TOT] .nextt =ヘッド[U]。
    ヘッド[U]は ++ TOTを= 
} 
ボイド DFS(INT U、INT F){
     ためint型 I =ヘッド[U];〜I; I = E [I] .nextt){
         int型、V = E [I] .V。
        もし(vは== f)を
             続けます
        息子[U] .push_back(V)。
        DFS(V、U); 
    } 
    int型フラグ= 0 もし(!U = 1 
        フラグ = 1 ;
    INT K =息子[U] .size()+ フラグ。
    DP [U] =FAC [K]。
    以下のためにint型 I = 0 ; iが<息子[U] .size(); iが++ ){ 
        DP [U]は DP [U] * DP [息子[U] [I]%= MODと、
    } 
} 
)({解決ちゃう
    DFS(11 )。
    戻り DP [ 1 ] * N%のMODと、
} 
int型のmain(){ 
    scanf関数(" %のD "、&N)
    FAC [ 0 ] = 1 ;
    int型 i = 1 ; iが<= N iが++ 
        FACを[i]は =(iは[FAC * I-1 ])%のMOD。
    memsetの(頭、 - 1はsizeof (ヘッド))。
    以下のためにint型 i = 1 ; iがn <; iは++ ){
         int型Uを、V。
        scanf関数(" %d個の%d個"、&​​U&V); 
        addedge(U、V); 
        addedge(V、U); 
    } 
    のprintf(" %I64d " 、解決())。
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/starve/p/10992709.html