The Shortest Path

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3164    Accepted Submission(s):
1030

Problem Description
There are N cities in the country. Each city is
represent by a matrix size of M*M. If city A, B and C satisfy that A*B = C, we
say that there is a road from A to C with distance 1 (but that does not means
there is a road from C to A).
Now the king of the country wants to ask me
some problems, in the format:
Is there is a road from city X to Y?
I have
to answer the questions quickly, can you help me?
 
Input
Each test case contains a single integer N, M,
indicating the number of cities in the country and the size of each city. The
next following N blocks each block stands for a matrix size of M*M. Then a
integer K means the number of questions the king will ask, the following K lines
each contains two integers X, Y(1-based).The input is terminated by a set
starting with N = M = 0. All integers are in the range [0, 80].
 
Output
For each test case, you should output one line for each
question the king asked, if there is a road from city X to Y? Output the
shortest distance from X to Y. If not, output "Sorry".
 
Sample Input
3 2
1 1
2 2
1 1
1 1
2 2
4 4
1
1 3
3 2
1 1
2 2
1 1
1 1
2 2
4 3
1
1 3
0 0
 
Sample Output
1
Sorry
 
Source
 
题意:先输入n,m,接着输入n个m*m的矩阵,再输入k表示k次询问,接下来输入k行输入x,y,询问x点是否能到y点,可以则输出最短路。 当矩阵 A*B = C 的时候,A点到C点的距离是1.
 
先处理矩阵,建图,此题数据只有85,直接用floyd就好。
 
附上代码:
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 85
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int map[N][N];
int a[N][N][N],tem[N][N]; void floyd()
{
int i,j,k;
for(k=; k<=n; k++)
for(i=; i<=n; i++)
for(j=; j<=n; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
} void getmap()
{
int i,j,k,x,y,z;
for(i=; i<=n; i++)
for(j=; j<=m; j++)
for(k=; k<=m; k++)
scanf("%d",&a[i][j][k]);
for(i=; i<=n; i++)
for(j=; j<=n; j++)
if(i==j) map[i][j]=;
else map[i][j]=INF;
for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
{
if(i==j) continue;
memset(tem,,sizeof(tem));
for(x=; x<=m; x++)
for(y=; y<=m; y++)
{
tem[x][y]=;
for(z=; z<=m; z++) ///矩阵计算
tem[x][y]+=a[i][x][z]*a[j][z][y];
}
for(x=; x<=n; x++)
{
if(x==i||x==j)
continue;
int flag=;
for(y=; y<=m; y++)
{
for(z=; z<=m; z++)
{
if(tem[y][z]!=a[x][y][z]) ///比较是否完全相同
{
flag=;
break;
}
}
if(!flag)
break;
}
if(flag)
map[i][x]=;
}
}
}
floyd();
}
int main()
{
int i,j,k,x,y;
while(~scanf("%d%d",&n,&m))
{
if(n==&&m==)
break;
getmap();
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&x,&y);
if(map[x][y]<INF)
printf("%d\n",map[x][y]);
else
printf("Sorry\n");
}
}
return ;
}

hdu 2807 The Shortest Path(矩阵+floyd)的更多相关文章

  1. hdu-----(2807)The Shortest Path(矩阵+Floyd)

    The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. hdu 2807 The Shortest Path

    http://acm.hdu.edu.cn/showproblem.php?pid=2807 第一次做矩阵乘法,没有优化超时,看了别人的优化的矩阵乘法,就过了. #include <cstdio ...

  3. Hdu 4725 The Shortest Path in Nya Graph (spfa)

    题目链接: Hdu 4725 The Shortest Path in Nya Graph 题目描述: 有n个点,m条边,每经过路i需要wi元.并且每一个点都有自己所在的层.一个点都乡里的层需要花费c ...

  4. HDU 4725 The Shortest Path in Nya Graph [构造 + 最短路]

    HDU - 4725 The Shortest Path in Nya Graph http://acm.hdu.edu.cn/showproblem.php?pid=4725 This is a v ...

  5. hdu 3631 Shortest Path(Floyd)

    题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...

  6. HDU 2224 The shortest path

    The shortest path Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. HDU 4725 The Shortest Path in Nya Graph

    he Shortest Path in Nya Graph Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged o ...

  8. (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  9. HDU 4725 The Shortest Path in Nya Graph(构图)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. homebrew长时间停在Updating Homebrew 这个步骤

    在国内的网络环境下使用 Homebrew 安装软件的过程中可能会长时间卡在 Updating Homebrew 这个步骤. 例:执行 brew install composer 命令 ➜ ~ brew ...

  2. day38 04-Spring加载配置文件

    Spring的工厂类ApplicationContext有两个子类:ClassPathXmlApplicationConext和FileSystemXmlApplication都可以用来加载配置文件. ...

  3. vue 使用 element ui动态添加表单

    html部分 <div class="hello"> <el-form :model="dynamicValidateForm" ref=&q ...

  4. linux系统服务

    系统服务分类,根据其使用的方法来分,可以被分为三类 a.由init控制的服务:基本都是系统级别的服务,运行级别这一章讲的就是这一类的服务 b.由System V启动脚本启动的服务:和我们打交道最多的一 ...

  5. hadoop-hive查询ncdc天气数据实例

    使用hive查询ncdc天气数据 在hive中将ncdc天气数据导入,然后执行查询shell,可以让hive自动生成mapredjob,快速去的想要的数据结果. 1. 在hive中创建ncdc表,这个 ...

  6. agc015D A or...or B Problem

    题意:求用若干个(至少一个)[A,B]中的数进行or操作能得到多少本质不同的数 $1 \leq A \leq B < 2^{60}$ 一直在想数位dp,看了题解之后感觉自己就是个sb 我们先把$ ...

  7. 通过sql 向数据库插入多行语句

    我们知道通过insert into 表名(列名) values(值)是向表中插入一条语句,可是当我们需要向数据库插入多条语句时,应该怎么做呢? 可以通过如下格式的sql 语句来实现一次向数据库插入多行 ...

  8. 介绍Provide以及Inject

    介绍 Vue 的 Provide 以及 Inject Provide 以及 Inject 是 Vue 中用于祖先元素向其所有后台元素注入依赖的接口. 具体用法 // Data.vue ... expo ...

  9. Leetcode682.Baseball Game棒球比赛

    你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的得分):表示本轮获得 ...

  10. 想要快速完成一个Python项目,离不开这些开源库

    链接:https://opensource.com/article/18/9/python-libraries-side-projects 在Python / Django世界中有一句话:我们为语言而 ...