题面

传送门

题解

结,结论题?

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

答案就是\(n^{m-1}m^{n-1}\)

我们考虑它的\(Prufer\)序列,最后剩下的两个点肯定是一个在左边一个在右边,设左边\(n\)个点,右边\(m\)个点,\(Prufer\)序列中左边的点肯定出现了\(m-1\)次,右边的点出现了\(n-1\)次,那么就是上面那个了

听说这题可以手屠基尔霍夫矩阵做出来

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define ld long double
#define inline __inline__ __attribute__((always_inline))
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
ll n,m,P;
inline ll mul(R ll x,R ll y){
    R ll tmp=x*y-(ll)((ld)x/P*y)*P;
    return tmp<0?tmp+P:tmp;
}
ll ksm(R ll x,R ll y){
    R ll res=1;
    for(;y;y>>=1,x=mul(x,x))(y&1)?res=mul(res,x):0;
    return res;
}
int main(){
//  freopen("testdata.in","r",stdin);
    scanf("%lld%lld%lld",&n,&m,&P);
    printf("%lld\n",mul(ksm(n,m-1),ksm(m,n-1)));
    return 0;
}
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄