【t044】弗洛伊德
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
弗洛伊德是一个大牛!给一个有向图G,他有n个结点,现在请你求出对于他的每一对结点(x,y),从x出发走恰好k条边以后恰
好到达结点y的路径条数。
【输入格式】
输入文件第一行包含两个正整数n,k。(1<=n<=50,1<=k<=100)
接下来n行,每行n个用空格隔开的数。若第i行第j个数为1,则表示i到j在G中有一条边直接相连,若为0,则没有边直接相
连。
【输出格式】
输出文件包含n行,每行n个用空格隔开的数。表示从i出发走恰好k条边到达j的方案数。为了避免数字太大,请将所有数对8000取模。
Sample Input
2 1
0 1
1 0
Sample Output
0 1
1 0
【题解】
可以验证一下
3 2
0 1 0
0 0 1
0 0 0
->
0 0 1
0 0 0
0 0 0
表示只有一条路径从1到3是恰好走2格的。
答案就是改矩阵的K次方。
加一个快速幂就能过了。
和普通的乘法运算不同。
矩阵乘法的快速幂,退出条件为now<=1;而不是now=0;
因为now=1的时候没有必要再进行乘法运算了。因为一开始的初始状态就对于矩阵的1次方。
再乘会错解;
【代码】
#include <cstdio> const int MAXN = 51;
const int MOD = 8000; int n, k,a[MAXN][MAXN],temp[MAXN][MAXN],temp1[MAXN][MAXN]; void input_data()
{
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
scanf("%d", &a[i][j]);
temp[i][j] = a[i][j];
}
} void solve(int now)
{
if (now == 1)
return;
solve(now >> 1);
for (int i = 1;i <= n;i++)//每行乘每列!
for (int what = 1; what <= n; what++)//这三个for可以自己推下。
{
temp1[i][what] = 0;
for (int j = 1; j <= n; j++)
temp1[i][what] = (temp1[i][what] + temp[i][j] * temp[j][what]) % 8000;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
temp[i][j] = temp1[i][j];
if ((now %2)==1)
{
for (int i = 1; i <= n; i++)
for (int what = 1; what <= n; what++)
{
temp1[i][what] = 0;
for (int j = 1; j <= n; j++)
temp1[i][what] = (temp1[i][what] + temp[i][j] * a[j][what]) % 8000;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
temp[i][j] = temp1[i][j];
}
} void output_ans()
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n - 1; j++)
printf("%d ", temp[i][j]);
printf("%d\n", temp[i][n]);
} } int main()
{
//freopen("F:\\rush.txt", "r", stdin);
//freopen("F:\\rush_out.txt", "w", stdout);
input_data();
solve(k);
output_ans();
return 0;
}
【t044】弗洛伊德的更多相关文章
- Leetcode 166. Fraction to Recurring Decimal 弗洛伊德判环
分数转小数,要求输出循环小数 如2 3 输出0.(6) 弗洛伊德判环的原理是在一个圈里,如果一个人的速度是另一个人的两倍,那个人就能追上另一个人.代码中one就是速度1的人,而two就是速度为2的人. ...
- Leetcode 202 Happy Number 弗洛伊德判环解循环
今天先谈下弗洛伊德判环,弗洛伊德判环原来是在一个圈内有两人跑步,同时起跑,一人的速度是另一人的两倍,则那个人能在下一圈追上另一个人,弗洛伊德判环能解数字会循环出现的题,比如说判断一个链表是不是循环链表 ...
- AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)
1009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descriptio ...
- Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- C# 弗洛伊德(Floyd)算法
弗洛伊德(Floyd)算法 主要是用于计算图中所有顶点对之间的最短距离长度的算法,如果是要求某一个特定点到图中所有顶点之间的最短距离可以用; ; ; ; ...
- 弗洛伊德(Floyd)算法
#include <stdio.h> #define MAXVEX 20 //最大顶点数 #define INFINITY 65535 //∞ typedef struct {/* 图结构 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- POJ 3660 Cow Contest 弗洛伊德
题意难懂是POJ的标配,这都TM赖本泽马. 题意:有N头牛进行了M场比赛,比赛双方是A - B 且总是A赢(前面的那个数赢),如果说A赢B,B赢C 则可以确定A赢C.问最终多少头牛的排名可以确定. 思 ...
- BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德
BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们 ...
随机推荐
- jmeter的运行原理和测试计划要素
jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...
- XAML 很少人知道的科技 - walterlv
原文:XAML 很少人知道的科技 - walterlv XAML 很少人知道的科技 发布于 2019-04-30 02:30 更新于 2019-04-30 11:08 本文介绍不那么常见的 XAML ...
- 《C语言深度解剖》学习笔记之预处理
第3章 预处理 1.下面两行代码都是错的.因为注释先于预处理指令被处理,当这两行被展开成“//……”和“/*……*/”时,注释已处理完毕,所以出现错误 #define BSC // #define B ...
- mysql 中 DATE_ADD函数和 DATE_SUB函数用法
mysql 中 DATE_ADD(date,INTERVAL expr type) 和 DATE_SUB(date,INTERVAL expr type) 这些函数执行日期运算. date 是一个 D ...
- MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案
MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下: Error Code: 1055. Ex ...
- 数据节点Datanodes
- @codeforces - 913F@ Strongly Connected Tournament
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个选手参加了一场竞赛,这场竞赛的规则如下: 1.一开始,所有 ...
- PHP 7.0新增特性详解
https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...
- @noi.ac - 171@ 立方体
目录 @description@ @solution@ @accepted code@ @details@ @description@ TonyFang 打算送你一些立方体. 你需要在 [1, n] ...
- Web应用中request获取path,URI,URL
Web应用中有各种获取path或URI,URL的方法,假设网页访问地址: http://localhost:8080/tradeload/TestServlet Web应用context: /trad ...