zoukankan      html  css  js  c++  java
  • BZOJ4766: 文艺计算姬(Prufer序列)

    题面

    传送门

    题解

    结,结论题?

    答案就是(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
    ",mul(ksm(n,m-1),ksm(m,n-1)));
    	return 0;
    }
    
  • 相关阅读:
    10 期末大作业
    09 spark连接mysql数据库
    08 学生课程分数的Spark SQL分析
    07 从RDD创建DataFrame
    06 Spark SQL 及其DataFrame的基本操作
    05 RDD编程
    05 RDD练习:词频统计
    04 RDD编程练习
    Spark RDD编程
    Spark架构与运行流程
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/10717212.html
Copyright © 2011-2022 走看看