题解 | #路径数量#

路径数量

https://ac.nowcoder.com/acm/problem/18355

学过离散数学的都应该知道这题怎么做,然后我用的是矩阵快速幂,复杂度
,就算是遇到 值很大的情况下也可以解。

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;
typedef long long ll;
const int maxn=40;

int n,k;
struct node{
    ll f[maxn][maxn];
    inline node operator*(const node&x)const{
        node y; memset(y.f,0,sizeof(y.f));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                for(int k=1;k<=n;k++)
                {
                    y.f[i][j]+=f[i][k]*x.f[k][j];
                }
            }
        }
        return y;
    }
}a;

node qpow(node a,int b)
{
    node ans; memset(ans.f,0,sizeof(ans.f));
    for(int i=1;i<=n;i++)ans.f[i][i]=1;
    while(b)
    {
        if(b&1)ans=ans*a;
        b>>=1; a=a*a;
    }
    return ans;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a.f[i][j];
        }
    }
    node ans=qpow(a,k);
    cout<<ans.f[1][n]<<endl;
    return 0;
} 
全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务