hdu 2807 The Shortest Path

点击打开链接hdu 2807

思路:最短路+floyd+矩阵乘法

分析:
1 题目明确要求x->y是否有了,而且有多次询问,所以序则floyd
2 题目给的点的形式是矩阵,所以还要去处理矩阵,判断A*B=C
3 题目说了A B C三个城市,所以做A B C三个是不同的

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 110
#define INF 0xFFFFFFF

int n , m , k;
long long dis[MAXN][MAXN];
int tmp_matrix[MAXN][MAXN];
struct City{
   int matrix[MAXN][MAXN];
}c[MAXN];

/*初始化*/
void init(){
   for(int i = 1 ; i <= n ; i++){
      for(int j = 1 ; j <= n ; j++)
         dis[i][j] = INF;
      dis[i][i] = 0;
   }
}

/*判断是否满足A*B = C*/
bool judge(int i){
   for(int j = 1 ; j <= m ; j++){
      for(int k = 1 ; k <= m ; k++){
        if(c[i].matrix[j][k] != tmp_matrix[j][k])
          return false;
      }
   }
   return true;
}

void solve(){
    for(int i = 1 ; i <= n ; i++){
       for(int j = 1 ; j <= n ; j++){/*枚举矩阵*/
          /*求新矩阵*/
          for(int k = 1 ; k <= m ; k++){
             for(int t = 1 ; t <= m ; t++){
                tmp_matrix[k][t] = 0;
                for(int h = 1 ; h <= m ; h++)
                   tmp_matrix[k][t] += c[i].matrix[k][h]*c[j].matrix[h][t];
             }
          }
          for(int g = 1 ; g <= n ; g++){
             if(judge(g) && g != i && g!= j)
               dis[i][g] = 1;
          }
       }
    }
}

long long min(long long a , long long b){
    return a < b ? a : b;
}

void floyd(){
    for(int k = 1 ; k <= n ; k++){
       for(int i = 1 ; i <= n ; i++){
          for(int j = 1 ; j <= n ; j++)
             dis[i][j] = min(dis[i][k]+dis[k][j] , dis[i][j]);
       }
    }
}

int main(){
   int star , end;
   while(scanf("%d%d", &n , &m) && n+m){
      init();
      for(int i = 1 ; i <= n ; i++){/*输入n个矩阵*/
         for(int j = 1 ; j <= m ; j++){
           for(int k = 1 ; k <= m ; k++)
              scanf("%d" , &c[i].matrix[j][k]);
         }
      }
      solve();/*判断点之间是否连通*/
      floyd();
      scanf("%d" , &k);
      for(int i = 0 ; i < k ; i++){
          scanf("%d%d" , &star , &end);
          if(dis[star][end] == INF)
            printf("Sorry\n");
          else
            printf("%lld\n" , dis[star][end]);
      }
   }
   return 0;
}
时间: 2025-01-26 23:59:25

hdu 2807 The Shortest Path的相关文章

HDU 2807 The Shortest Path:最短路+矩阵快速比较

链接: http://acm.hdu.edu.cn/showproblem.php?pid=2807 题目: The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1421    Accepted Submission(s): 436 Problem Description There are N citi

hdu 3631 Shortest Path

点击打开链接hdu 3631 思路:最短路+floyd 分析: 1 题目给的n <= 300,而边数m<=100000,并且有Q<= 100000次询问.刚开始我用优先队列+Dij然后就开始TLE,然后就没然后了. 2 看了题解之后猛然发现这尼玛就是floyd,(对算法理解不透测).我们知道floyd就是每次都拿一个中间点k来更新dis,题目中是只有标记过的点才能够使用,那么就像floyd一样只要是标记来这个点那么就可以用这个点来进行更新dis,然后如果要求两点直间的距离只要查找即可.

最短路专题【完结】

第一题 hdu 1317 XYZZY 点击打开hdu 1317 思路: 1 题目的图是一个有向图,并且可能存在环.第一个点的能量值为100,边的权值利用能量大小,例如2点为-60,如果1->2那么value[1][2] = -602 题目明确指出如果是要win的话,那么必须是经过的每条边都要大于0.那么我们只要把那些经过松弛操作后的点大于0的入队即可,小于等于0的点肯定不会出现在最终的路径上.3 如果存在正环的话,那么就有能量值无限大,那么这个时候只要判断这个点能否到达n4 判断是否是有环还是五

HDU 1595 find the longest of the shortest(枚举,最短路)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1595 题目: find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 667    Accepted Submission(s): 220 Problem Description Ma

Nodejs基础:路径处理模块path总结

本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 模块概览 在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块.部分因为文档说的不够清晰,部分因为接口的平台差异性. 将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了. 获取路径/文件名/扩展名 获取路径:path.dirname(filepath) 获取文件名:path.basename(filepath) 获取扩展名:path.extname(filepath) 获取所在路径 例子

hdu 5422 Rikka with Graph

click here ~~ ***Rikka with Graph*** Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them: Yuta has a non-direct graph with n vertices and m

Node.js中路径处理模块path详解_node.js

前言 在node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性,将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了.下面我们就来详细介绍下关于Node.js中的路径处理模块path. 获取路径/文件名/扩展名      获取路径:path.dirname(filepath)      获取文件名:path.basename(filepath)      获取扩展名:path.extname(filepath) 获取所在路径 例子如下

路由器的基本协议与技术

VPN VPN(Virtual Private Network-虚拟专用网)解决方案是路由器具有的重要功能之一.其解决方案大致如下: 1.访问控制 一般分为PAP(口令认证协议)和CHAP(高级口令认证协议)两种协议.PAP要求锹颊呦蚰勘曷酚善魈峁┯没涂诹睿肫浞梦柿斜恚ˋccess List)中的信息相符才允许其登录.它虽然提供了一定的安全保障,但用户登录信息在网上无加密传递,易被人窃取.CHAP便应运而生,它把一随机初始值与用户原始登录信息(用户名和口令)经Hash算法翻译后形成新的登录

OSPF在企业网上的应用

OSPF简介: OSPF是Open Shortest Path First(开放最短路由优先协议)的缩写.他是IETF组织开发的一个基于链路状态的自治系统内部路由协议. 实验环境:cisco 一.为什么要使用OSPF来作为企业网中的动态路由协议? 企业网内的动态路由,常用的就三种:rip,ospf和eigrp,前两种是公开协议,每个厂家的路由器都支持,最后一种是cisco的私有协议,只有思科路由器可以使用该协议. rip只适合用于规模较小的网络,因为其原理,决定了网络越大,使用rip消耗的网络带