hdu2807 矩阵乘法+floyd
网上有优化的方法 就是乘上一个一维的矩阵;现在还没有想通。想通了不上代码;
我用的就是普通的矩阵,压着时间过;只是多了一个判断条件,不加这个条件就超时;
#include<stdio.h>
#include<string.h>
#define INF 99999999
#define maxn 85
struct Mat
{
int mat[maxn][maxn];
}a[];
int n,m,map[maxn][maxn];
Mat operator * (Mat a,Mat b)
{
Mat c;
int i,j,k;
memset(c.mat,,sizeof(c.mat));
for(i=;i<m;i++)
for(j=;j<m;j++)
for(k=;k<m;k++)
{
c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
}
return c;
}
int ok(Mat aa,Mat bb)
{
int i,j;
for(i=;i<m;i++)
for(j=;j<m;j++)
{
if(aa.mat[i][j]!=bb.mat[i][j])
return ;
}
return ;
}
void init()
{
int i,j;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(i==j)map[i][j]=;
else map[i][j]=INF;
}
void floyd()
{
int i,j,k;
for(i=;i<n;i++)
for(j=;j<n;j++)
for(k=;k<n;k++)
if(map[j][k]>map[j][i]+map[i][k])
map[j][k]=map[j][i]+map[i][k];
}
int main()
{
int i,j,k; while(scanf("%d%d",&n,&m)!=EOF)
{
if(!n&&!m)break;
init();
for(i=;i<n;i++)
{
for(j=;j<m;j++)
for(k=;k<m;k++)
scanf("%d",&a[i].mat[j][k]);
}
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
if(i==j)continue;
Mat c=a[i]*a[j];
for(k=;k<n;k++)
{
if(map[i][k]==)continue;//加上就不超时
if(i==k||j==k)continue;
if(ok(c,a[k]))
map[i][k]=;
}
}
}
/*
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",map[i][j]);
printf("\n");
}
*/
floyd();
int k;
scanf("%d",&k);
for(i=;i<k;i++)
{
int x ,y;
scanf("%d %d",&x,&y);
x--;y--;
if(map[x][y] >= INF)
printf("Sorry\n");
else printf("%d\n",map[x][y]);
}
}
}
hdu2807 矩阵乘法+floyd的更多相关文章
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7825 Accepted: 3068 Descri ...
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑【矩阵乘法+Floyd】
唔不知道怎么说--大概核心是把矩阵快速幂的乘法部分变成了Floyd一样的东西,非常之神 首先把点离散一下,最多有200个,然后建立邻接矩阵,a[u][v]为(u,v)之间的距离,没路就是inf 然后注 ...
- 【Floyd矩阵乘法】BZOJ1706- [usaco2007 Nov]relays 奶牛接力跑
[题目大意] 给出一张无向图,求出恰巧经过n条边的最短路. [思路] 首先题目中只有100条边,却给出了10000个点(实际上最多只能有200个),离散化一下. 后面就是Floyd的新姿势,以前看过的 ...
- CF_576D_Flights for Regular Customers_矩阵乘法+倍增floyd+bitset+bfs
CF_576D_Flights for Regular Customers_矩阵乘法+倍增floyd+bitset https://www.luogu.org/problemnew/show/CF57 ...
- bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...
- 【floyd+矩阵乘法】POJ 3613 Cow Relays
Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a rel ...
- hdu4920 Matrix multiplication 模3矩阵乘法
hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 ...
- 如何使用矩阵乘法加速动态规划——以[SDOI2009]HH去散步为例
对这个题目的最初理解 开始看到这个题,觉得很水,直接写了一个最简单地动态规划,就是定义 f[i][j]为到了i节点路径长度为j的路径总数, 转移的话使用Floyd算法的思想去转移,借助这个题目也理解了 ...
随机推荐
- TestNG之执行顺序
如果很有个测试方法,并且这几个方法又有先后顺序,那么如果让TestNG按照自己想要的方法执行呢 一.通过Dependencies 1.在测试类中添加Dependencies @Test public ...
- UESTC 885 方老师买表 --状压DP
将方格的摆放分成两种: 1.水平摆放:此时所占的两个格子都记为1. 2.竖直摆放:此时底下那个格子记为1,上面那个记为0. 这样的话,每行都会有一个状态表示. 定义:dp[i][s]表示考虑已经填到第 ...
- 第51课 C++对象模型分析(下)
1. 单继承对象模型 (1)单一继承 [编程实验]继承对象模型初探 #include <iostream> using namespace std; class Demo { protec ...
- C# Reflection BindingFlags
定义包含在搜索中的成员 下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员: 为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.St ...
- 【Asp.Net】document.getElementById 的属性介绍
document.getElementById("id").style.xxx可以设置指定ID的控件的属性值. 主要支持以下一些属性设置: 盒子标签和属性对照 CSS语法(不区分大 ...
- JNI 程序开发
参考资料: http://blog.csdn.net/wwj_748/article/details/28136061 JNI_最简单的Java调用C/C++代码 http://blog.csdn.n ...
- HTML基础 - <base>标签的使用
标签对于不是很熟悉前端的人应该还算是个生面孔吧,粗略讲讲标签的用法. 将相对路径变成绝对路径 这个对于需要借(chao)鉴(xi)别人网页的时候特别有用~ 批量设置target=_blank 当需要对 ...
- Eclipse中10个最有用的快捷键组合(转)
Eclipse中10个最有用的快捷键组合 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask ...
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...
- IT客学院《构建高转化率的着陆页-PS+HTML+网络营销》共25节【价值199元】无水印版
课程简介本课程是全网独家专业的着陆页课程,课程完整的再现了整个着陆页实战案例的开发过程,包括:策划.设计和实现.上线后的推广.优化及提高转化率的技巧等,本套课程能帮助您迅速掌握着陆页的能力,迅速洞察完 ...