图论矩乘——Luogu2233 [HNOI2002] 公交车路线

来源:互联网 发布:开淘宝化妆品店铺名字 编辑:程序博客网 时间:2024/04/24 01:40

https://www.luogu.org/problem/show?pid=2233
这个矩阵和floyd很像,可以说就是floyd吧,或者说直接叫图论矩乘吧
就是说每条公交车路线为初始矩阵啦~(相邻的点,不过5不要考虑因为到达5停止了的)
他需要n次从1到5,那么矩阵快速幂n次就好了
最后答案输出1到5的即可

#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD=1000;struct juzhen{ll a[10][10];}x,y,s,c;inline juzhen cheng(juzhen a,juzhen b){    memset(c.a,0,sizeof c.a);    for(ll i=1;i<=8;i++)        for(ll j=1;j<=8;j++)            for(ll k=1;k<=8;k++)(c.a[i][j]+=a.a[i][k]*b.a[k][j])%=MOD;    return c;}inline juzhen mi(juzhen a,ll b){    x=y=a;    while(b!=0){        if(b&1==1)x=cheng(x,y);        y=cheng(y,y);b>>=1;    }    return x;}int main(){    ll n;scanf("%lld",&n);    for(ll i=1;i<=8;i++)if(i!=5)s.a[i][i-1]=s.a[i][i+1]=1;    s.a[1][8]=s.a[8][1]=1;    s=mi(s,n-1);//我这种写法需要-1    printf("%lld",s.a[1][5]%MOD);    return 0;}
1 0
原创粉丝点击