フェイス質問
n個の点の木を与え、それに描かれた円を必要とし、エッジが交差しない、構成描画対応(すなわち、同じオペレータの異なる種類の回転)、プログラムの数を見つけます。フォーポイントツリー以下の図\(T:V = \ { 1,2,3,4 \}、E = \ {(1,2)、(1,3)、(2,4)\} \ )解決策:
元のタイトルのCFからの画像
分析
xのサブツリーのために、我々はそうでない状況は以下の図が表示されます、サブツリーのノードxが円上の連続区間でなければなりません見つけます
[x]は、xは度を表し、42度に設けられ
非ルートXの場合:
そこ度X [X] -1息子、プログラムが配置された息子の\((DEGは、[X] -1)!\)種、次いで息子息子とルートに任意の合計℃に隣接する位置に挿入[x]は空の、総答えは((DEG [X] -1 \ [X]!\)!\回度[X] =゜)
ルートXの場合:
Xの位置自体は、必要に応じてNが゜.X [X]息子が配置スキーム有する、円周上に置換されていてもよい\を(N゜回\ [X ]!\)
従って、プログラムの総数\(N \倍\ prod_ { i = 1} ^ N°(I)!\)
コード
#include<iostream>
#include<cstdio>
#define maxn 200005
#define mod 998244353
using namespace std;
int n;
long long fact[maxn];
int deg[maxn];
int main(){
int u,v;
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d %d",&u,&v);
deg[u]++;
deg[v]++;
}
fact[0]=1;
for(int i=1;i<=n;i++){
fact[i]=fact[i-1]*i%mod;
}
long long ans=1;
for(int i=1;i<=n;i++){
ans*=fact[deg[i]];
ans%=mod;
}
ans*=n;
ans%=mod;
printf("%I64d\n",ans);
}