• BZOJ 4766: 文艺计算姬


    4766: 文艺计算姬

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 456  Solved: 239
    [Submit][Status][Discuss]

    Description

    "奋战三星期,造台计算机"。小W响应号召,花了三星期造了台文艺计算姬。文艺计算姬比普通计算机有更多的艺
    术细胞。普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一个带标号完全二分图的生成树
    个数。更具体地,给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图K_{n,m},计算姬能快
    速算出其生成树个数。小W不知道计算姬算的对不对,你能帮助他吗?

    Input

    仅一行三个整数n,m,p,表示给出的完全二分图K_{n,m}
    1 <= n,m,p <= 10^18

    Output

    仅一行一个整数,表示完全二分图K_{n,m}的生成树个数,答案需要模p。

    Sample Input

    2 3 7

    Sample Output

    5

    HINT

    Source

    分析:

    貌似可以Matrix-Tree打表找规律?

    可以用prufer编码证明...

    首先理解一下什么叫prufer编码:戳这里

    考虑如果两个点有边相连,那么这两个点一定属于不同的集合,并且最后剩下的两个点一定是属于不同集合的,所以这个长度为$n+m-2$的序列一定是有$n-1$个$A$集合的点和$m-1$个$B$集合点,所以答案就是$n^{m-1}*m^{n-1}$...

    代码:

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    //by NeighThorn
    #define int long long 
    using namespace std;
    
    int n,m,mod;
    
    inline int mul(int x,int y){
    	int res=0;
    	while(y){
    		if(y&1)
    			res=(res+x)%mod;
    		x=(x+x)%mod,y>>=1;
    	}
    	return res;
    }
    
    inline int power(int x,int y){
    	int res=1;
    	while(y){
    		if(y&1)
    			res=mul(res,x);
    		x=mul(x,x),y>>=1;
    	}
    	return res;
    }
    
    signed main(void){
    	scanf("%lld%lld%lld",&n,&m,&mod);
    	printf("%lld
    ",mul(power(n,m-1),power(m,n-1)));
    	return 0;
    }
    

      


    By NeighThorn

  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/neighthorn/p/6568410.html
Copyright © 2020-2023  润新知