zoukankan      html  css  js  c++  java
  • HDU 2157

    给图,图中任意可达的两点间步数为1

    问从图中A点走到B点步数为k的有几条路

    祭出离散数学图论那章中的 邻接矩阵A.

    设S=Ak

    则 S[a][b] 为 a到b,步数为k的不同路的条数

    剩下的就是矩阵快速幂了

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 const int mod=1000; 
     6 struct P{
     7     int a[20][20];
     8 };    
     9 int n,m,t,a,b,k;
    10 P s,c;
    11 P mult(P a,P b)
    12 {
    13     P c;
    14     memset(c.a,0,sizeof(c.a));
    15     for(int i=0;i<n;i++)
    16     {
    17         for(int j=0;j<n;j++)
    18         {
    19             for(int k=0;k<n;k++)
    20                 c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j] )%mod;
    21         }
    22     }
    23     return c;
    24 }
    25 void fuc(int p,P s)
    26 {
    27     memset(c.a,0,sizeof(c.a));
    28     for(int i=0;i<n;i++) c.a[i][i]=1;
    29     while(p)
    30     {
    31         if(p&1)
    32         {
    33             c=mult(c,s);
    34         }
    35         s=mult(s,s);
    36         p>>=1;
    37     }
    38 }
    39 int main()
    40 {
    41     while(~scanf("%d%d",&n,&m)&&(m+n))
    42     {
    43         memset(s.a,0,sizeof(s.a));
    44         for(int i=1;i<=m;i++)
    45         {
    46             scanf("%d%d",&a,&b);
    47             s.a[a][b]=1;
    48         }
    49         scanf("%d",&t);
    50         for(int i=1;i<=t;i++)
    51         {
    52             scanf("%d%d%d",&a,&b,&k);
    53             fuc(k,s);
    54             printf("%d
    ",c.a[a][b]);
    55         }
    56     }
    57 }
    我自倾杯,君且随意
  • 相关阅读:
    css概述五
    css概述四
    css概述三
    css概述二
    css概述
    Python的第三方web开发框架Django
    Python中的模块和包
    SQL语句优化
    数据库向Excel写入数据
    动态拼接sql语句
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5646217.html
Copyright © 2011-2022 走看看