Nauuoとサークルリング/の「CF1172B」木の魔法「NOIP以上の2019の学校の入学試験。」

問題の意味

マジックリングの位置、およびこれらn個の場所二十から二智のオーバーラップを表示するために使用されるn神ビーズで、魔法の指輪-大魔王ルシファーは同じひどい人工物を持っています。ルシファーが呪文のいくつかの種類をキャストしたいとき、彼は神N Nこの位置にビーズとなり、代わりに神ビーズの後、存在する場合とのスレッドは、「クローズ接続」神のビーズを持って生成されます。 2本のワイヤが交差点智の頂点で交差すると、ルシファーの呪文は失敗し、今、あなたはそれらのビーズの間で彼の神は神の計画に置かどのように多くのビーズを彼に伝えるためにあなたを求めて、「密接な接触」を持つルシファーを伝えます成功した呪文を唱えますか?
ところで:神のビーズがポイントとして見た場合、密接な接触は、神のビーズとの密接な接触は、ツリーを構成するであろう、側面として見られています。


考え

質問ああ愚かな良い人の顔を変更します。

オリジナル題するCF1172B(CF1173D)。

データリンクが良いしたい、答えは\(N2 N2 ^ {} \)

一般的なケースでは、手の小さなサンプルを再生すると式可能([i]のN- \パイ度!\)\、暴力に関する事前階乗を求めます。

コード

#include <bits/stdc++.h>

using namespace std;

namespace StandardIO {

    template<typename T>inline void read (T &x) {
        x=0;T f=1;char c=getchar();
        for (; c<'0'||c>'9'; c=getchar()) if (c=='-') f=-1;
        for (; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
        x*=f;
    }

    template<typename T>inline void write (T x) {
        if (x<0) putchar('-'),x*=-1;
        if (x>=10) write(x/10);
        putchar(x%10+'0');
    }

}

using namespace StandardIO;

namespace Project {
    #define int long long
    
    const int N=200200;
    const int MOD=998244353;
    
    int n;
    int cnt;
    int head[N];
    struct node {
        int to,next;
    } edge[N<<1];
    int an[N],vis[N];
    int fact[N],cn[N];
    
    inline void add (int a,int b) {
        edge[++cnt].to=b,edge[cnt].next=head[a],head[a]=cnt;
    } 
    int ksm (int base,int power) {
        int res=1;
        while (power) {
            if (power&1) res=(res*base)%MOD;
            base=(base*base)%MOD,power>>=1;
        }
        return res;
    }
    
    inline void MAIN () {
        read(n);
        for (register int i=1,x,y; i<n; ++i) {
            read(x),read(y);
            add(x,y),add(y,x);
            ++cn[x],++cn[y];
        }
        fact[0]=1;
        for (register int i=1; i<=n; ++i) {
            fact[i]=(i*fact[i-1])%MOD;
        }
        int res=n;
        for (register int i=1; i<=n; ++i) {
            res=(res*fact[cn[i]])%MOD;
        }
        write(res);
    }
    
    #undef int
}

int main () {
//  freopen("1.in","r",stdin);
//  freopen(".out","w",stdout);
    Project::MAIN();
}

おすすめ

転載: www.cnblogs.com/ilverene/p/11622368.html