比赛 |
20121107 |
评测结果 |
C |
题目名称 |
最难的任务 |
最终得分 |
0 |
用户昵称 |
skyfisherman |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-11-07 10:15:28 |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
struct Line{
int x,l;
Line *next;
Line(int a,int b,Line *c):
x(a), l(b), next(c) {}
}* G[201];
int queue[20000],dist[201],n;
bool inque[201];
int spfa(){
memset(dist,0x3f,sizeof(dist));
memset(inque,0,sizeof(inque));
queue[0]=1; dist[1]=0;
int h=0, t=1, x, k;
while(h<t){
x=queue[h++]; inque[x]=false;
for(Line *p=G[x];p;p=p->next){
if((k=dist[x]+p->l)<dist[p->x]){
dist[p->x]=k;
if(!inque[p->x]){
inque[p->x]=true;
queue[t++]=p->x;
}
}
}
}
return (dist[n]==0x3f3f3f3f?-1:dist[n]);
}
void solve(){
int a,b,c,m;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d%d",&a,&b,&c);
G[a]=new Line(b,c,G[a]);
G[b]=new Line(a,c,G[b]);
}
printf("%d\n",spfa());
}
int main(){
int T;
scanf("%d",&T);
while(T--)solve();
}