1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7
8 using namespace std;
9
10 const int maxn=5005;
11 const int inf=1e9;
12
13 typedef pair<int,int> P;
14
15 vector G[maxn];
16
17 struct node{
18 int t,v,pos;
19 bool operator <(const node&a)const{
20 return v>a.v;
21 }
22 };
23
24 int n,m;
25
26 int d[2][maxn];
27 int cou[2][maxn];
28
29 void init(){
30 for(int i=0;i){
31 G[i].clear();
32 d[0][i]=d[1][i]=inf;
33 }
34 }
35
36 void dijkstra(int s){
37 priority_queue q;
38 q.push((node){s,0,0});
39 d[0][s]=0;
40 while(!q.empty()){
41 node now=q.top();
42 q.pop();
43 for(int i=0;i){
44 int v=G[now.t][i].first;
45 int dis=G[now.t][i].second;
46 if(d[0][v]>d[now.pos][now.t]+dis){
47 d[1][v]=d[0][v];
48 d[0][v]=d[now.pos][now.t]+dis;
49 q.push((node){v,d[1][v],1});
50 q.push((node){v,d[0][v],0});
51 }
52 else if(d[1][v]>d[now.pos][now.t]+dis){
53 if(v==n&&d[0][v]==d[now.pos][now.t]+dis) continue;
54 d[1][v]=d[now.pos][now.t]+dis;
55 q.push((node){v,d[1][v],1});
56 }
57 }
58 }
59 }
60
61 int main(){
62 ios::sync_with_stdio(false);
63 cin.tie(0);
64 int T;
65 cin>>T;
66 int cou=0;
67 while(T--){
68 init();
69 cin>>n>>m;
70 for(int i=0;i){
71 int s,t,e;
72 cin>>s>>t>>e;
73 G[s].push_back(P(t,e));
74 G[t].push_back(P(s,e));
75 }
76 dijkstra(1);
77 cout<<"Case "<<++cou<<": "<1][n]<<endl;
78 }
79 return 0;
80 }