uva 558(最短路径)
来源:互联网 发布:软件注册权认证 编辑:程序博客网 时间:2024/06/07 02:57
题意:有一个科学家进行星际旅行回到过去,给出了一些星球移动之间的时间变化,如果从星球a到星球b的时间变化为负的,说明时间在倒退,如果时间变化为正的说明时间快进,问是否能让科学家回到很久很久以前。
题解:如果能存在一个负环路径让科学家不停的循环让时间无限倒退就可以实现。用bellman-ford算法,更新所有星球到地球的最短路径存到d数组中,然后再遍历以此,如果d数组的值又发生了变化说明存在负环,不存在最短路径。
#include <stdio.h> #include <string.h> const int M = 2005;const int N = 1005;const int INF = 0x3f3f3f3f;int t, n, m, flag, temp;int d[N], v[M], u[M], w[M];int main() {scanf("%d", &t);while (t--) {memset(d, INF, sizeof(d));flag = 0;scanf("%d%d", &n, &m);for (int i = 0; i < m; i++)scanf("%d%d%d", &v[i], &u[i], &w[i]);d[0] = 0;for (int i = 0; i < n - 1; i++)for (int j = 0; j < m; j++) {int x = v[j], y = u[j];if (d[x] < INF)d[y] = d[y] < d[x] + w[j] ? d[y] : d[x] + w[j];}for (int i = 0; i < m; i++) {int x = v[i], y = u[i];if (d[x] < INF) {int temp = d[y];d[y] = d[y] < d[x] + w[i] ? d[y] : d[x] + w[i];if (temp != d[y]) {flag = 1;break;}}}if (flag)printf("possible\n");elseprintf("not possible\n");}return 0;}
0 0
- uva 558(最短路径)
- uva 10803(最短路径)
- Uva 11090 最短路径
- uva 567(最短路径)
- uva 10048(最短路径)
- uva 10099(最短路径)
- uva 10801(最短路径)
- uva 10986(最短路径)
- uva 10985(最短路径)
- uva 10269(最短路径)
- uva 563 Crimewave 最短路径
- Uva 429 Word Transformation ( 最短路径 )
- uva 1416 Warfare And Logistics (最短路径树)
- 最短路径算法
- 最短路径算法
- 最短路径理解
- 最短路径算法
- 最短路径算法
- 产品经理要怎么想?
- Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较
- mysql 允许远程访问
- jqueryui默认显示的是英文的日期格式,中文显示
- FTCoreText图文混排框架
- uva 558(最短路径)
- yii 1.1.*中用户验证接口IUserIdentity的使用
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
- 【PHP入门】一、环境搭建
- 在Eclipse 中重复导入相同的Android项目时
- flex4 给Group增加边框
- Sqlite + CodeBlocks + Ubuntu
- sqlmap
- SQLSERVER中如何忽略索引提示