图论500 ---- HDU3631 Shortest Path Floyed 插点法 真正了解Floyed
题目链接
题目大意:
一个单向图,先输入n个点,m条边,k次询问。接下来m行输入相连点的边和距离,然后输入k次询问。输入0,x,表示标记x点,输入1,x,y,表示询问点x到点y的距离。只能走已标记的点。如果标记的点已标记 输出 ERROR! At point x,如果询问距离的两点有未标记的,输出 ERROR! At path x to y,如果都标记了,但是走不通,则输出 No such path,否则输出两点之间的距离。
floyd的灵活运用,直接用新标记的点更新,避免了O(n∗n∗n)O(n*n*n)O(n∗n∗n)
解题思路:
我们知道floyed 的外层循环是kkk,表示当前的最短路网络里面所以i和ji和ji和j之间的最短路都是经过[1,k−1][1,k-1][1,k−1]里面的点的
那么我们知道外面实际上就是一个中转点,其实这道题就是每次加入一个中转点去跟新里面的最短路网络!!
#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;
int n,m,k;
int map[305][305];
int vis[305];
void floyd(int k) ///新插入的点
{int i,j;for(i=0; i<n; i++)for(j=0; j<n; j++)if(map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];
}
int main()
{int cas=1,i,j;while(~scanf("%d%d%d",&n,&m,&k)){if(n==0&&m==0&&k==0)break;memset(vis,0,sizeof(vis));for(i=0; i<n; i++)for(j=0; j<n; j++)if(i==j) map[i][j]=0;else map[i][j]=INF;int a,b,c;while(m--){scanf("%d%d%d",&a,&b,&c);if(map[a][b]>c)map[a][b]=c;}if(cas!=1)printf("\n");printf("Case %d:\n",cas++);int x,y;while(k--){scanf("%d",&c);if(c){scanf("%d%d",&x,&y);if(vis[x]&&vis[y]){if(map[x][y]!=INF)printf("%d\n",map[x][y]);elseprintf("No such path\n");}elseprintf("ERROR! At path %d to %d\n",x,y);}else{scanf("%d",&x);if(vis[x])printf("ERROR! At point %d\n",x);else{vis[x]=1;floyd(x);}}}}return 0;
}
图论500 ---- HDU3631 Shortest Path Floyed 插点法 真正了解Floyed相关推荐
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 4kyu Path Finder #2: shortest path
4kyu Path Finder #2: shortest path 题目背景: Task You are at position [0, 0] in maze NxN and you can onl ...
- 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)
一.最短路径问题 [google笔试题]一个环形公路,给出相邻两点的距离(一个数组),求任意两点的最短距离,要求空间复杂度不超过O(N). 如果从有向图中某一顶点(称为源点)到达另一顶点(称为终点)的 ...
- P - The Shortest Path in Nya Graph HDU - 4725
P - The Shortest Path in Nya Graph HDU - 4725 最短路 不是 每两个点之间按层数设置边权 + 额外边权 TLE 是 相邻两层之间设置边权 + 额外边权 需注 ...
- [CF843D]Dynamic Shortest Path
[CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...
- zoj 2760 How Many Shortest Path 最大流
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...
- OSPF(Open Shortest Path First开放式最短路径优先)
**协议** OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(a ...
- AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input ...
- AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)
题目链接: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_B Single Source Shortest Path ( ...
最新文章
- Kibana查询说明
- 请说明一下Spring中BeanFactory和ApplicationContext的区别是什么?
- c/c++ base64编码后,通过php解码,中文乱码解决办法
- bkwin设置文本控件为多行模式
- 纪中B组模拟赛总结(2020.2.13)
- 越是被吐槽,女博士这个群体就越强!!
- 《学习之道》第六章习惯的部分-反应程序
- .NET 环境下进制间的转换
- Struts2框架的概念及使用方法
- 新课改计算机论文,新课改中职计算机职业教育论文
- Ubuntu 18.04安装i686-elf交叉编译工具链的方法
- 林文信12小时学会流行键盘基础教程-爱奇艺链接地址
- mysql 右连接(right join)
- 猿创征文|三维重建领域的开发者工具箱
- 大数据分析方法:定性研究还是定量研究
- System.IO.FileNotFoundException: Could not load file or assembly ‘System.Data.SQLite.dll‘ or one of
- 【影像组学】理论学习——特征类型
- 天龙八部服务器列表文件,TLBB服务端目录文件作用
- 等腰杨辉三角C语言实现
- 频繁撤单有风险?--这些委托类型让您享受“撤单豁免权”