UVa 11463 - Commandos
2015-06-23 14:55
351 查看
题目:有一个敢死队,要摧毁一群建筑,他们从一个特定的建筑出发,最后到一个特定的建筑集合;
现在给你各个建筑之间的连接路线,在建筑中穿梭需要1个单位时间,问集合的最早时间。
分析:图论,最短路径。直接计算起点s和终点e到那个其他所有点的最短路径;
取min(dist(s,k)+ dist(k,e))即可(0≤k<n)。
说明:第650题目╮(╯▽╰)╭。
现在给你各个建筑之间的连接路线,在建筑中穿梭需要1个单位时间,问集合的最早时间。
分析:图论,最短路径。直接计算起点s和终点e到那个其他所有点的最短路径;
取min(dist(s,k)+ dist(k,e))即可(0≤k<n)。
说明:第650题目╮(╯▽╰)╭。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int path[101][101]; int main() { int T,n,m,u,v,b,e; while (~scanf("%d",&T)) for (int t = 1; t <= T; ++ t) { scanf("%d%d",&n,&m); for (int i = 0; i < n; ++ i) { for (int j = 0; j < n; ++ j) path[i][j] = 101; path[i][i] = 0; } for (int i = 0; i < m; ++ i) { scanf("%d%d",&u,&v); path[u][v] = path[v][u] = 1; } //floyd for (int k = 0; k < n; ++ k) for (int i = 0; i < n; ++ i) for (int j = 0; j < n; ++ j) if (path[i][j] > path[i][k]+path[k][j]) path[i][j] = path[i][k]+path[k][j]; scanf("%d%d",&b,&e); int max = 0; for (int k = 0; k < n; ++ k) if (max < path[b][k]+path[k][e]) max = path[b][k]+path[k][e]; printf("Case %d: %d\n",t,max); } return 0; }
相关文章推荐
- Maven之生成测试覆盖度的插件cobertura-maven-plugin的使用
- duilib list 获取选中的行ID 获取行数 获取行指针 获取本行索引
- Ubuntu终端常用的快捷键
- 设计模式六大原则(1):单一职责原则
- eclipse-debug时直接进入/不进入/提示进入调试页面修改
- String to Integer (atoi) ***
- UV Toolkit贴图教程甜
- 在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)
- C++队列实现和队列简介
- duilib list 去掉表头
- LayoutInflater的inflate函数用法详解
- ffmpeg常用基本命令
- Linux进程间通信(IPC)
- Scrum敏捷过程实践
- [XCode] XCode默认storyboard是正方形的问题
- 使用jquery实现搜索框的位置变换
- 50条大牛C++编程开发学习建议
- 如何做淘宝客推广淘宝客教程视频
- Oracle PGA作用
- SQL Script for read information from a csv file in FTP Server