BZOJ.4766.文艺计算姬(Prufer)

题目链接

这是完全二分图,那么在构造Prufer序列时,最后会剩下两个点,两点的边是连接两个集合的,这两个点自然分属两个集合
那么集合A被删了m-1次,每次从n个点中选;B被删了n-1次,每次都可以从m个点中选。so ans = n^{m-1}*m^{n-1}
答案可以根据相对顺序直接构造

//820kb	0ms
#include <cstdio>
typedef long long LL;
LL n,m,p;

LL Mult(LL a,LL b)
{
	LL tmp=a*b-(LL)((long double)a/p*b+1e-8)*p;
	return tmp<0?tmp+p:tmp;
}
LL FP(LL x,LL k)
{
	LL t=1;
	for(; k; k>>=1,x=Mult(x,x))
		if(k&1) t=Mult(t,x);
	return t;
}

int main()
{
	scanf("%lld%lld%lld",&n,&m,&p);
	printf("%lld",Mult(FP(n,m-1),FP(m,n-1)));
	return 0;
}
原文地址:https://www.cnblogs.com/SovietPower/p/8484340.html