【规律】【upc10780】多边形

题目链接

题目描述

我们如下定义一种称为“k-n边形”的平面无向图:
0-n边形为一个n个点的环,如下为0-4边形(拐点处为图的节点):

k-n边形为:在(k-1)-n边形的基础上,对于每条最外一圈的边,再添加n-2个点和n-1条边,与这条边两端的点连成一个n个点的环。
如下为1-4边形与2-4边形:

给出k,n,求k-n边形的生成树个数,对998244353取模。

输入

一行,两个非负整数k,n。

输出

一个整数表示答案。 

样例输入

1 4

样例输出

768

2018济南发财兔 

【小结】:

推了一下午公式+一整天时间打表写数据,还是没看出来任何规律,顺带还看了一下矩阵树定理,然后问了学长拿标程,还是没有看懂代码的含义,希望贴标程出来大家可以跟我讨论一下,我真的不愿意把时间浪费了却没找到规律,这个是多么可惜的一件事情呀。


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int N=1e6+10;
ll qpow(ll a,ll b){
    ll ans=1;
    while(b){
        if( b&1 ) ans=ans*a%mod ;
        a=a*a%mod ;
        b>>=1;
    }
    return ans;
}
ll f[N],g[N],k,n,ans;
int main()
{
    f[0]=g[0]=1;
    cin>>k>>n;
    for(int i=1;i<=k;i++){
        g[i]=(1ll*(n-1)*g[i-1]%mod*qpow(f[i-1],n-2))%mod;
        f[i]=(g[i]+qpow(f[i-1],n-1))%mod;
    }
    ans=(1ll*n*g[k]%mod*qpow(f[k],n-1))%mod;
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Z_sea/article/details/87900784