hdu 2807 The Shortest Path(矩阵+floyd)

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
 
此题要先找出哪些城市可以连边,可以通过矩阵相乘来实现,得出的矩阵与第三个矩阵比较,看看是否可以连边。
算出所有edge后,再通过floyd来算出任意两个城市的最短距离。
 
  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<vector>
  5 #include<set>
  6 using namespace std;
  7 #define inf 1<<26
  8 #define N 86
  9 int n,m;
 10 int edge[N][N];
 11 struct Matrix
 12 {
 13     int mp[N][N];
 14 }matrix[N];
 15 Matrix Mul(Matrix a,Matrix b)
 16 {
 17     Matrix res;
 18     for(int i=1;i<=m;i++)
 19     {
 20         for(int j=1;j<=m;j++)
 21         {
 22             res.mp[i][j]=0;
 23             for(int k=1;k<=m;k++)
 24             {
 25                 res.mp[i][j]=res.mp[i][j]+(a.mp[i][k]*b.mp[k][j]);
 26             }
 27         }
 28     }
 29     return res;
 30 }
 31 bool judge(Matrix a,Matrix b)
 32 {
 33     for(int i=1;i<=m;i++)
 34     {
 35         for(int j=1;j<=m;j++)
 36         {
 37             if(a.mp[i][j]!=b.mp[i][j])
 38               return false;
 39         }
 40     }
 41     return true;
 42 }
 43 void init()
 44 {
 45     for(int i=1;i<=n;i++)
 46     {
 47         for(int j=1;j<=n;j++)
 48         {
 49             if(i==j)
 50                  edge[i][j]=0;
 51             else 
 52             {
 53                   edge[i][j]=inf;
 54                 }
 55         }
 56     }
 57 }
 58 void floyd()
 59 {
 60     for(int k=1;k<=n;k++)
 61     {
 62         for(int i=1;i<=n;i++)
 63         {
 64             for(int j=1;j<=n;j++)
 65             {
 66                 if(edge[i][j]>edge[i][k]+edge[k][j])
 67                   edge[i][j]=edge[i][k]+edge[k][j];
 68             }
 69         }
 70     }
 71 }
 72 int main()
 73 {
 74     while(scanf("%d%d",&n,&m)==2 && n+m)
 75     {
 76         //memset(edge,0,sizeof(edge));
 77         
 78         init();
 79         
 80         for(int i=1;i<=n;i++)
 81         {
 82             for(int j=1;j<=m;j++)
 83             {
 84                 for(int k=1;k<=m;k++)
 85                 {
 86                     scanf("%d",&matrix[i].mp[j][k]);
 87                 }
 88             }
 89         }
 90         for(int i=1;i<=n;i++)
 91         {
 92             for(int j=1;j<=n;j++)
 93             {
 94                 if(i==j)
 95                   continue;
 96                 Matrix tmp = Mul(matrix[i],matrix[j]);
 97                 for(int k=1;k<=n;k++)
 98                 {
 99                     if(i==k || j==k)
100                       continue;
101                       if(judge(tmp,matrix[k]))
102                         edge[i][k]=1;
103                    }
104             }
105         }
106         
107         floyd();
108         
109         int c;
110         scanf("%d",&c);
111         while(c--)
112         {
113             int u,v;
114             scanf("%d%d",&u,&v);
115             if(edge[u][v]!=inf)
116               printf("%d\n",edge[u][v]);
117             else 
118               printf("Sorry\n");
119         }
120     }
121     return 0;
122 }
View Code

 

Machine Unlearning: A Survey 机器学习已经引起了广泛的关注,并发展成为一种使能技术,用于广泛的高度成功的应用,如智能计算机视觉、语音识别、医疗诊断等。然而,由于隐私、可用性和/或被遗忘权,一些特定样本的信息需要从称为机器遗忘的模型中删除,这就产生了一种特殊的需求。这项新兴技术因其创新性和实用性而引起了学术界和工业界的极大兴趣。与此同时,这个雄心勃勃的问题导致了许多旨在应对其挑战的研究工作。据我们所知,没有任何研究分析过这一复杂的主题,也没有比较过现有的遗忘解决方案在不同场景下的可行性。因此,通过这项调查,我们旨在了解遗忘技术的关键概念。 阅读详情

相关推荐

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1102

hdu 2807 The Shortest Path(矩阵计算+Floyd)

http://acm.split.hdu.edu.cn/showproblem.php?pid=2224题目大意: 城市一共有n个地点,每个地点是一个m*m的矩阵,当a*b=c时,说明a可以到达c,是单向边解题思路: 矩阵计算,并且判断a与c是否连接,然后求出最短路即可。#include<iostream> #include<cstring> #include<cstdio> #define I

HJ 708

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2976

hdu 2807 The Shortest Path 优化矩阵运算+floyd

题目链接 题意:给出n个城市,每个城市为一个m阶矩阵。若存在矩阵B使矩阵A*B==C,那么城市A到C有一条路径为1的路。求两个城市之间的最短路。 这题貌似一般的暴力过不了,需要用到矩阵乘法的优化。由于这题的数据量很小,判断出两个城市之间的路径后用Floyd就可以轻松求解。 矩阵相乘优化算法实现讲解:传送门。 这题要注意A,B,C之间都不相等,否则wa。 #include #includ

弱菜zc 913

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9053

Linux下基于AHCI controller模块实现SATA Platform驱动附代码详细流程

本文主要是针对ARM A55集成了AHSATA controller模块开发sata驱动,通过Platform的形式在linux识别到SSD,本文详细讲述整个开发过程,同时对SATA Platform驱动进行讲解。1、配置SATA Phy的初始化;2、打开SATA Platform相关编译开关;3、配置设备树;4、linux启动识盘。

Luckiers的博客 2497

HDU 2807 The Shortest Path(矩阵相乘+Floyd)

HDU 2807 The Shortest Path(矩阵比较+Floyd) http://acm.hdu.edu.cn/showproblem.php?pid=2807 题意:有N个城市,每个城市用一个M*M的矩阵表示.如果矩阵A*矩阵B== 矩阵C,那么我们说城市A到城市C有一条长度为1的路.现在你要回答对于特定的两个城市是否存在路,如果存在的话,最短路是多少? 分析:

code 1271

高通camera:PDAF的配置与测试

确认相关log日志都已经打开了之后,判断是在3A算法中没有应用到PDAF,可能是之前在调试AF效果的时候关闭了PDAF,打开效果文件对应的文件夹,在\kamorta_lce_S5K3P9\Scenario.Default\XML\STATS。在log中搜索af_pdaf_proc_pd_single,这个函数是pdaf算法中的,源码被封装了,这里看不到,因此只能通过log打印出来的参数来分析pd是否正确,主要参数有pd ,defocus,confidence。PDAF的配置与测试。

arvin_xiong的博客 2486

hdu 2807 The Shortest Path(矩阵相乘+floyd)

http://acm.hdu.edu.cn/showproblem.php?pid=2807 大致题意:给出n个m*m的矩阵,若存在三个互异的矩阵满足a*b = c,那么a,c之间存在权值为1的单向边。有询问u,v,输出uv之间的最短距离。 #include #include #include #include #include #include #include #in

1028

UE 顶点动画工具 (VAT)

导入模型需要勾选全精度UV。

iesoxj的博客 1640

MATLAB 与 STK 互联导出导弹轨迹及速度数据(csv导出)

本文介绍了如何通过 MATLAB 脚本连接 STK 提取导弹三维轨迹数据,并以 CSV 格式导出,包含以下关键内容:自动连接 STK 场景;获取所有导弹对象;提取 J2000 坐标系下的位置和速度;加入任务优先级与状态;导出为标准 CSV 文件;

weixin_52370774的博客 778

HDU 2807 The Shortest Path 矩阵 + Floyd

水题, 直接模拟就可以。姿势要注意。。 #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <stack> #include <map> #include <set> #inclu...

weixin_30545285的博客 109

VN5620以太网测试——DoIP配置

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。参考文章了解DoIP协议——汽车以太网应用介绍。

诊断协议那些事儿's blog 3006

HDU - 2807The Shortest Path(矩阵相乘+Floyd)

题意:有 n 个矩阵,大小均为 m*m, 如果存在 A*B = C, 则A到C存在路径,且长度为1,询问 k 次,某两个矩阵是否存在最短路,有则输出最短路,没有输出 Sorry。数据均不超过 80 思路:用朴素矩阵乘法造图,再用 Floyd 求最短路。

晚风中的自由 1018

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDU 2807 The Shortest Path 把矩阵抽象成点+Floyd

题意:有n个m*m的矩阵,设矩阵A,B,C,如果A*B=C表示从A到B有一条权值为1的边。有q次询问,如果第i个矩阵到第j个矩阵有路径,则输出最短,无则输出sorry。 想法:比较简单,矩阵抽象为点,寻求,矩阵之间的单向关系,然后建边,题目询问可能很大,显然Floyd。spfa为单源最短路,需要枚举,所以耗时。 #include #include #include #defin

猫ER 596

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU2807:The Shortest Path(矩阵乘法+快速矩阵比较+Floyd)

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

计算机图形编程 441

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 2807 The Shortest Path(矩阵+floyd)

The Shortest Path Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3164Accepted Submission(s): 1030 Problem Description There are N citi...

weixin_30414245的博客 120

hdu 2807 The Shortest Path【暴力/矩阵判等优化+Floyd】

The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3042    Accepted Submission(s): 995 Problem Description There are N c

mengxiang000000 501

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

The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2440    Accepted Submission(s): 784 Problem Description There are N citie...

weixin_34295316的博客 158

hdu 2807 The Shortest Path

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2807 TLE疯了。 最短路问题+矩阵快速比较! 城市用矩阵表示,当矩阵A*B=C时,A与C单向联通,且距离为1; 判断X,Y是否连通。 1.直接把任意两个矩阵的乘积求出来。 2.二维变一维,这个我不会。看的解题报告 #include #include using namespac

qqspeed 732

HDU 2807 The Shortest Path

传送门 最短路。全源最短路,使用floyd。 给你很多个矩阵,每个矩阵代表一个点,两点之间有一条有向边(A->C,权值为1)当且仅当A*B=C(矩阵运算),其中A,B,C代表不同的点。然后给很多个查询,每次问你从一个点到另一个点的最短路。 主要注意上述A,B,C指代不同的点。 矩阵相乘放在第二层循环得出结果,再和第三层枚举的每个矩阵比较。 话说...

weixin_30748995的博客 137

hdu2807---The Shortest Path

The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2552    Accepted Submission(s): 807 Problem Description There are N c

Alex 772

HDU 2807 The Shortest Path

http://acm.hdu.edu.cn/showproblem.php?pid=2807 题意 : 类似于最短路,不过几个city之间的联系是从他们的矩阵信息中所得到的。(矩阵A * 矩阵B = 矩阵C 则说明A 于 C 之间单向连通并且距离为1,PS : 但是并不是说明B可以连通C,因为矩阵乘法位置互换之后结果不一定相等) 思路 :矩阵乘法复杂度在O(M^3),而枚举每一组A,...

ab9952288的博客 121

hdu2807The Shortest Path floyd

//对于矩阵A,B,C A*B = C //那么A,C之间有一条路 //找出A,C的最短路 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 110 ; const int inf = 0x3f3f3f3f ; int A[maxn][maxn][maxn] ; i

ijbuhv的专栏 753
上一篇: Cubieboard4卡片式电脑
下一篇: 关于使用mail命令产生:-bash: mail: command not found的解决方法
weixin_33728708
博客等级 码龄11年 5472粉丝 1452原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值