比赛 |
20121107 |
评测结果 |
AWTTT |
题目名称 |
最难的任务 |
最终得分 |
20 |
用户昵称 |
奇诺 |
运行时间 |
3.004 s |
代码语言 |
C++ |
内存使用 |
5.02 MiB |
提交时间 |
2014-09-20 20:42:41 |
显示代码纯文本
#include<cmath>
#include<cstdio>
int q;
int n,m;
int a,b;
int i,j;
int dist[40000],c[40000];
int f[1000000],top,tai;
int L[40000],W[40000],T[40000],D[40000],t;
int main ( )
{
freopen ("hardest.in" ,"r",stdin );
freopen ("hardest.out","w",stdout);
scanf("%d",&q);
while (q--)
{
scanf("%d%d",&n,&m);
for (i=1; i<=n; i++) W[i]=0;
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&j);
L[++t]=W[a]; W[a]=t; T[t]=b; D[t]=j;
L[++t]=W[b]; W[b]=t; T[t]=a; D[t]=j;
}
for (i=1; i< n; i++) dist[i]=3000000;
dist [n]=0;
f[tai=1]=n;
for (top=1; top<=tai; c[f[top++]]=0)
{
for (i=W[f[top]]; i; i=L[i])
if (dist[f[top]]+D[i]<dist[T[i]])
{
dist[T[i]]=dist[f[top]]+D[i];
if (!c[D[i]]) f[++tai]=D[i] ,c[D[i]]=1;
}
}
if (dist[1]==3000000) printf("-1\n");
else printf("%d\n",dist[1]);
}
}