题目名称 | 1254. 最难的任务 |
---|---|
输入输出 | hardest.in/out |
难度等级 | ★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 5 |
题目来源 | cqw 于2012-11-07加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:111, 提交:303, 通过率:36.63% | ||||
Tiny | 100 | 0.027 s | 100.54 MiB | C++ |
┭┮﹏┭┮ | 100 | 0.039 s | 4.83 MiB | C++ |
Bokjan | 100 | 0.051 s | 0.31 MiB | C++ |
可以的. | 100 | 0.053 s | 0.55 MiB | C++ |
小e | 100 | 0.056 s | 2.63 MiB | C++ |
WxjianF019 | 100 | 0.058 s | 13.67 MiB | C++ |
WxjianF019 | 100 | 0.060 s | 13.67 MiB | C++ |
NARUTO | 100 | 0.062 s | 0.47 MiB | C++ |
as | 100 | 0.062 s | 39.20 MiB | C |
zjmfrank2012 | 100 | 0.063 s | 0.46 MiB | C++ |
本题关联比赛 | |||
20121107 | |||
20121107 | |||
20150714B |
关于 最难的任务 的近10条评论(全部评论) | ||||
---|---|---|---|---|
重边权值居然可以不一样QωQ(当然可以不一样)
| ||||
话说打错的程序还能得40分,其他的运行时出错。
这是什么鬼..... | ||||
不会写Floyd只会写Dijs不用考虑重边
| ||||
看评论想着处理n==1,写着写着就忘了。顺便,一开始还跪在“单文件多数据”的初始化上了。。
| ||||
没看到重边。。。
一個人的雨
2015-04-04 21:23
13楼
| ||||
和长相一样,最朴实的才是最安全的……
| ||||
懒得写什么spfa、邻接矩阵了,一个Floyd解决;但还是跪在n=1的情况上了、、
| ||||
回复 @省选完挂,OI再见 : 贴代码很不美观啊
| ||||
#include<cstdio>
#include<cstring> #include<iostream> using namespace std; #define N 205 int map[N][N]; int n, m; inline void floyd(){ for (int i = 1; i <= n; i ++) map[i][i] = 0; for (int k = 1; k <= n; k ++) for (int i = 1; i <= n; i ++){ if (i != k){ for (int j = 1; j <= n; j ++) if (j !=i && j != k){ map[i][j] = min(map[i][j], map[i][k] + map[k][j]); } } } } int main(){ freopen("hardest.in", "r", stdin); freopen("hardest.out", "w", stdout); int T; scanf("%d", &T); while (T --){ memset(map, 0x3f, sizeof(map)); scanf("%d %d", &n, &m); int x, y, z; for (int i = 1; i <= m; i ++){ scanf("%d %d %d", &x, &y, &z); map[x][y] = min(map[x][y], z); map[y][x] = min(map[x][y], z); } floyd(); if (map[1][n] != 0x3f3f3f3f) printf("%d\n", map[1][n]); else printf("-1\n"); } return 0; } | ||||
floyd其实可以过,但实在是被重边给坑到了。
蒟蒻哭晕在机房。
Ezio
2014-09-21 16:57
8楼
|
这个真的很难。算出 12345678987654321!,这个“!”是阶乘的意思。
呵,我在开玩笑。没有人成功的解决。
事实上,你是一个间谍。你要窃取一些敌军机密,现在你需要找到一个方法使你逃走的时间最少。
这里有很多交叉点和很多道路,在两个交叉点间可能有多条路。你很困惑,但随身携带笔记本电脑让你很快乐。
第一行有一个整数T(T≤10)表示测试数据个数。
每组数据以两个整数开始,n和m(1≤n≤200,0≤m≤10000),交叉点的个数和各自的道路数。下面m行有三个整数 i,j,k(i<>j, 1≤k≤10000), 意思是i和j中间有一条长度为k的路。
你可以假设交叉点的编号为1...n。你需要从交叉点1到交叉点n。
道路是双向的。
对于每组测试数据,打印最短距离。如果没有路可以出去,打印-1。
1 2 1 1 2 3
3