首页 > 其他分享 >gym-103708D Different Pass a Ports

gym-103708D Different Pass a Ports

时间:2022-08-28 19:45:59浏览次数:97  
标签:node Different int gym 103708D array now ll

Different Pass a Ports

矩阵快速幂 模板

图的邻接矩阵的 \(k\) 次幂就是从图上所有点走 \(k\) 步的方案数

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int maxn = 110;
const ll mod = 1e9 + 7;

struct node
{
    ll array[maxn][maxn];
    int x, y;
    node(){x = 0, y = 0;}
    node(int _x, int _y) {x = _x; y = _y;}
    void init(int a)
    {
        for(int i=1; i<=x; i++)
            for(int j=1; j<=y; j++)
                array[i][j] = (i == j) * a;
    }
    node operator *(const node& a) const
    {
        node ans(x, a.y);
        ans.init(0);
        for(int i=1; i<=x; i++)
        {
            for(int j=1; j<=a.y; j++)
            {
                for(int k=1; k<=y; k++)
                {
                    ans.array[i][j] += array[i][k] * a.array[k][j] % mod;
                }
                ans.array[i][j] %= mod;
            }
        }
        return ans;
    }
};

node qpow(node x, int n)
{
    node ans(x.x, x.y);
    ans.init(1);
    while(n)
    {
        if(n & 1) ans = ans * x;
        n >>= 1;
        x = x * x;
    }
    return ans;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, m, k;
    cin >> n >> m >> k;
    node x(n, n);
    x.init(0);
    while(m--)
    {
        int a, b;
        cin >> a >> b;
        x.array[a][b]++;
        x.array[b][a]++;
    }
    node last = qpow(x, k);
    ll ans = 0;
    node now(1, n);
    now.init(1);
    now = now * last;
    for(int i=1; i<=n; i++)
        ans += now.array[1][i];
    ans %= mod;
    cout << ans << endl;
    return 0;
}

标签:node,Different,int,gym,103708D,array,now,ll
From: https://www.cnblogs.com/dgsvygd/p/16633456.html

相关文章

  • gym-103708F Froginald the frog
    Froginaldthefrog矩阵快速幂如果没有分隔的话,这就是一个矩阵快速幂求斐波那契的问题因为有分隔,因此考虑他们分成若干个块,每个块的方案数之积就是答案,显然分隔的长度如......
  • gym-103708B Building 5G antennas
    Building5Gantennasdfs剪枝要字典序最小,显然第一个点就是\(1\),后面考虑走\(k\)步后能到达的点集中选一个字典序最小的,重复该过程考虑\(set[i][j]\)表示第\(i\)......
  • 8.27训练赛(2018-2019, ICPC, Asia Yokohama Regional Contest 2018,gym102082)
    B一开始开题的时候想假了,以为用map存差的结果贪心就行了,实际上是一个比较妙的dp,用到了一个结论:两项就唯一确定一个等差数列。设\(f[i,j]\)表示最后两个数选了\(a_i\),\(a......
  • Try setting a different JdbcType for this parameter or a different jdbcTypeForNu
    Mybatis-plus连接Oracle数据库,更新插入操作报错,为空的字段不知道类型导致报错!!!  方法一在字段上添加注解el="字段名,jdbcType=字段类型"比如本例@TableField......
  • gym中的action_repeat
    Specifically,weaverageperformanceover10randomseeds,andreducethenumberoftrainingobservationsinverseproportionallytotheactionrepeatvalue.—......
  • [Codeforces_gym_102136] I.Permutations again
    传送门DescriptionGivenasequence\(A_i\)consistingof\(N\)integers.Findthenumberofpairs\((L,R)\)forwhichthesubsegment\({A_L,A_{L + 1},......
  • Gym102798 CCPC2020威海E加强版 题解
    原题link把\(m\)和\(a_i\)的上界改成\(200\),其他不变.基本思路:枚举\(S\),求出\(p(S)\)表示集合\(S\)中的怪兽被打死的概率,答案就是\(\sum_{S}|S|p(S)\).而这......
  • L6U6-Choosing a gym
    L6U6Choosingagym2022.08.14Sunday15:40-16:30thisclassstarted?==>Isthislessonstarted?Howmanygradesofyourcollege?Freshmansophomoreyearjun......
  • hdu7207-Find different【burnside引理】
    正题题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=7207题目大意一个序列\(a\),和它相同的序列当且仅当能通过以下操作实现相同:将\(a_1\)丢到\(a_n\),其余的向......