ZOJ 2504 Help John! 【最短路】 【Dijkstra】

来源:互联网 发布:莱纳德 知乎 编辑:程序博客网 时间:2024/04/29 22:18
 
//2632155 2011-08-18 21:18:49 Accepted            2504 C++  30  908 ylwh@Unknown//2627388 2011-08-14 20:08:17 Wrong Answer     2504 C++  30 4308 ylwh@Unknown//2627355 2011-08-14 19:48:41 Wrong Answer     2504 C++  30 4308 ylwh@Unknown//2627276 2011-08-14 18:37:24 Wrong Answer     2504 C++  30 4116 ylwh@Unknown//2627271 2011-08-14 18:34:20 Wrong Answer     2504 C++ 110 4116 ylwh@Unknown//2626370 2011-08-14 10:07:49 Wrong Answer     2504 C++   0 1000 ylwh@Unknown//2626350 2011-08-14 09:55:10 Wrong Answer     2504 C++   0 1000 ylwh@Unknown//2626345 2011-08-14 09:52:46 Wrong Answer     2504 C++ 10     1000 ylwh@Unknown//2626343 2011-08-14 09:51:42 Compilation Error 2504 C++  0        0 ylwh@Unknown//2626286 2011-08-14 08:56:20 Wrong Answer     2504 C++  0     1000 ylwh@Unknown//2626281 2011-08-14 08:38:35 Wrong Answer     2504 C++  0     1000 ylwh@Unknown//2626276 2011-08-14 08:19:42 Wrong Answer     2504 C++      0    11900 ylwh@Unknown//2626136 2011-08-13 21:30:32 Segmentation Fault 2504 C++  0        0 ylwh@Unknown//2626135 2011-08-13 21:30:02 Segmentation Fault 2504 C++  0        0 ylwh@Unknown//2626133 2011-08-13 21:29:34 Segmentation Fault 2504 C++  0        0 ylwh@Unknown#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <algorithm>using namespace std;#define M 30001#define N 1001#define MAX 20000000struct edge{int x, len;struct edge * next;}e[M*2+N];int d[N], staue[N], tmd[N];int main(){int t, tt, n, m, i, j, k, cnt;struct edge * next;scanf("%d", &t);for(tt=1; tt<=t; tt++){if(scanf("%d%d", &n, &m) == EOF)break;cnt = n;for(i=1; i<=n; i++){d[i] = MAX;e[i].next = NULL;staue[i] = 0;}int a, b, c;while(m--){scanf("%d%d%d", &a, &b, &c);e[++cnt].x = a;e[  cnt].len = c;e[  cnt].next = e[b].next;e[b].next = e + cnt;e[++cnt].x = b;e[  cnt].len = c;e[  cnt].next = e[a].next;e[a].next = e + cnt;}int kstaue;int flag = 0;d[1] = 0;scanf("%d", &k);scanf("%d", &tmd[1]);for(i=2; i<=k; i++){kstaue = 0;scanf("%d", &tmd[i]);next = e[ tmd[i-1] ].next;while(next != NULL){if(next->x == tmd[i]){kstaue = 1;d[ tmd[i] ] = d[ tmd[i-1] ] + next->len;break;}next = next->next;}if( !kstaue )flag = 1;}if(flag || d[n] == MAX || tmd[1] != 1 || tmd[k] != n){printf("TEST %d N\n", tt);continue;}int time1 = d[n];staue[1] = staue[ tmd[2] ] = 1;int now = tmd[2];int mins;for(i=3; i<=n; i++){next = e[now].next;while(next != NULL){if( !staue[next->x] && d[ next->x ] > d[now] + next->len)d[ next->x ] = d[now] + next->len;next = next->next;}mins = MAX;for(j=1; j<=n; j++)if( !staue[j] && d[j] < mins){now = j;mins = d[j];}staue[now] = 1;}int time2 = d[n];printf("TEST %d Y %d\n", tt, time1 - time2);}    return 0;}


原创粉丝点击