1.题目描写叙述:

pid=5411">点击打开链接

2.解题思路:本题实际是是已知一张无向图。问长度小于等于m的路径一共同拥有多少条。

能够通过建立转移矩阵利用矩阵高速幂解决。当中,转移矩阵就是输入时候的邻接矩阵,同一时候多添加最后一列,都置为1。表示从i開始的,长度不超过M的路径的答案总数(最后一行的1~n列为全0行,能够理解为空集),那么把转移矩阵自乘M-1次后就是路径长度为M的转移矩阵(这里的路径长度指的是顶点的个数。顶点=边数+1,因此仅仅须要乘M-1次)。

为何便于求和。能够设置一个第一行都为1的矩阵B,B*Trans后B[1][n+1]就是A的第n+1列全部项的和。输出就可以。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std; #define me(s) memset(s,0,sizeof(s))
#define pb push_back
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <ll, int> P; const int MOD = 2015;
const int N = 100000 + 5;
const int sz = 55; struct Matrix
{
int m[sz][sz];
Matrix(){ me(m); } Matrix operator*(const Matrix&b)
{
Matrix c;
for (int i = 0; i<sz; i++)
for (int j = 0; j<sz; j++)
for (int k = 0; k<sz; k++)
c.m[i][j] = (c.m[i][j] + m[i][k] * b.m[k][j]) % MOD;
return c;
} Matrix get(int n)
{
Matrix res, b = *this;
for (int i = 0; i<sz; i++)res.m[i][i] = 1;
while (n>0)
{
if (n & 1)res = res*b;
b = b*b;
n >>= 1;
}
return res;
}
}; int main()
{
int T;
for (scanf("%d", &T); T--;)
{
Matrix a, b;
int m, n, cnt, x;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n + 1; i++)a.m[i][n + 1] = 1; //第n+1列都设置为1。便于求和
for (int i = 1; i <= n; i++)
{
scanf("%d", &cnt);
for (int j = 1; j <= cnt; j++)
{
scanf("%d", &x);
a.m[i][x] = 1;
}
}
for (int i = 1; i <= n + 1; i++)//b矩阵第1行所有为1,便于对a矩阵的第n+1列求和
b.m[1][i] = 1;
a = a.get(m);
b = b*a;
if (m == 1)printf("%d\n", n + 1);
else printf("%d\n", b.m[1][n + 1]);
}
}

HDU 5411 CRB and Puzzle (2015年多校比赛第10场)的更多相关文章

  1. HDU 5414 CRB and String (2015年多校比赛第10场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题要求推断字符串s是否能通过加入若干个字符得到字符串t. 首先,能够知道,s必须是t的一个子串(注意:不是连续子串). 第二.因为插入的新字符和它前面的 ...

  2. HDU 5399 Too Simple (2015年多校比赛第9场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题分情况讨论.比赛时候真是想的太简单了.以为就是(n!)^(cnt-1). 终于无限WA. 本题有几个特殊情况须要额外推断. 首先,假设输入的时候.有某 ...

  3. 2015 Multi-University Training Contest 10 hdu 5411 CRB and Puzzle

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  4. HDU 5411 CRB and puzzle (Dp + 矩阵高速幂)

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  5. hdu 5411 CRB and Puzzle (矩阵高速幂优化dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5411 题意:按题目转化的意思是,给定N和M,再给出一些边(u,v)表示u和v是连通的,问走0,1,2... ...

  6. hdu 5411 CRB and Puzzle 矩阵高速幂

    链接 题解链接:http://www.cygmasot.com/index.php/2015/08/20/hdu_5411/ 给定n个点 常数m 以下n行第i行第一个数字表示i点的出边数.后面给出这些 ...

  7. HDU 5374 Tetris (2015年多校比赛第7场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题要求模拟俄罗斯方块游戏.然而比赛时候写了好久还是没过. 后来补题发现原来是第四步的逻辑实现写错了... 题目中要求假设一整行能够消除,那么仍然运行该步 ...

  8. HDU 5384 Danganronpa (2015年多校比赛第8场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题利用字典树解决.本题要求查找全部的B[j]在A[i]中出现的总次数.那么我们能够建立一颗字典树,将全部的B[j]插入字典树,因为一个串的全部字串相当于 ...

  9. HDU5374 Tetris (2015年多校比赛第7场)大模拟

    思路: 先写好了几个函数.旋转,四种操作,推断能否够进行合并消除 题中有好几处要考虑的细节问题,如 自然下落究竟部时不进行合并的推断,而是当自然下落非法时才推断 假设消除一行,这一行上面的所以方块仅仅 ...

随机推荐

  1. 学好js,这些js函数概念一定要知道

    函数创建方式 1.声明方式 例如:function consoleTip (){ console.log("tip!"); } 2.表达式方式 例如:var consoleTip ...

  2. Centos 安装 WPS

    Linux有自己的一套类是Office的办公软件:LibreOffice,但是不是很友好,幸好WPS有Linux版本. 安装步骤: 1.安装依赖包 yum install libpng12 yum i ...

  3. lamp 5.6.36 bug记录

    后来发现另一个问题,php文字水印中文是乱码. 用yum安装lamp环境详见:https://blog.csdn.net/u010071211/article/details/80370201 在ce ...

  4. hdu 5305 Friends(2015多校第二场第6题)记忆化搜索

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人on ...

  5. poj 1436 线段树

    题意:给你N条线段(垂直于x轴)的两个y坐标还有x坐标,问相互看到的三元组有多少个.有点纠结就是,如果两个连线之间正好有一条线段的某个端点,这个也是不能计算的,所以这个端点就有意义了,所以就用上面那个 ...

  6. Codeforces Beta Round #37 A. Towers 水题

    A. Towers 题目连接: http://www.codeforces.com/contest/37/problem/A Description Little Vasya has received ...

  7. 【转】JABC访问oracle数据库报ORA-12505

    Oracle 问题描述: 今天使用jdbc连接oracle 10.2.0.1.0 数据库的时候出现了下列错误: Connection refused(DESCRIPTION=(TMP=)(VSNNUM ...

  8. 【ButterKnife】 安卓程序猿的一大利器

    注:近期才看到的这个类库,来自于jakewharton大神的力作,安卓里面的视图注入库 另小弟水平有限,翻译的不好,还请多多指正 首先是地址(托管在github上):http://jakewharto ...

  9. 【Go入门教程7】面向对象(method、指针作为receiver、method继承、method重写)

    前面两章我们介绍了函数和struct,那你是否想过函数当作struct的字段一样来处理呢?今天我们就讲解一下函数的另一种形态,带有接收者(receiver)的函数,我们称为method method ...

  10. .Net高级技术——字符串拘留池(Intern)

    一.深入理解字符串的不可变特性 string可以看做是char的只读数组.char c = s[1] C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变.所以只能通过索引来读取指定位 ...