1 #include<stdio.h>
2 #include<iostream>
3 #include<string.h>
4 #define INF 0xffffff
5 using namespace std;
6 int i,j,k,start,dest,dist[102],n,m,edge[102][102],v,pre[102];
7 bool bellman_ford()
8 {
9 memset(pre,0,sizeof(pre));
10 for(k=1;k<=n;k++)dist[k]=edge[start][k];
11 for(k=1;k<=n;k++)
12 {
13 for(i=1;i<=n;i++)for(j=1;j<=n;j++)
14 if(dist[i]>edge[j][i]+dist[j])
15 dist[i]=edge[j][i]+dist[j],pre[i]=j;
16 }
17 for(i=1;i<=n;i++)for(j=1;j<=n;j++)
18 if(dist[i]>dist[j]+edge[j][i]) return 0;
19 return 1;
20 }
21 int main()
22 {
23 while(~scanf("%d%d",&n,&m))
24 {
25 scanf("%d%d",&start,&dest);
26 for(i=1;i<=n;i++)
27 {
28 for(j=1;j<=n;j++)edge[i][j]=INF;
29 dist[i]=INF;
30 }
31 for(k=1;k<=m;k++)
32 {
33 scanf("%d%d%d",&i,&j,&v);
34 edge[i][j]=edge[i][j]<v?edge[i][j]:v;
35 edge[j][i]=edge[i][j];
36 }
37 if(bellman_ford())printf("%d\n",dist[dest]);
38 }
39 return 0;
40 }
1 //ac
2 #include<stdio.h>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #define INF 0xffff
7 using namespace std;
8 int i,j,p,k,start,dest,dist[102],n,m,edge[102][102],v,pre[102];
9 int inq[102];
10 void spfa()
11 {
12 memset(pre,0,sizeof(pre));
13 memset(inq,0,sizeof(inq));
14 dist[start]=0;
15 queue<int>q;
16 q.push(start);
17 while(!q.empty())
18 {
19 p=q.front(),q.pop(),inq[p]=0;
20 for(i=1;i<=n;i++)
21 {
22 if(dist[p]+edge[p][i]<dist[i])
23 {
24 dist[i]=dist[p]+edge[p][i];
25 if(inq[i]==0)q.push(i),inq[i]=1;
26 }
27 }
28 }
29 }
30 int main()
31 {
32 while(~scanf("%d%d",&n,&m))
33 {
34 scanf("%d%d",&start,&dest);
35 for(i=1;i<=n;i++)
36 {
37 for(j=1;j<=n;j++)edge[i][j]=INF;
38 dist[i]=INF,edge[i][i]=0;
39 }
40 for(k=1;k<=m;k++)
41 {
42 scanf("%d%d%d",&i,&j,&v);
43 edge[i][j]=edge[i][j]<v?edge[i][j]:v;
44 edge[j][i]=edge[i][j];
45 }
46 spfa();
47 printf("%d\n",dist[dest]);
48 }
49 return 0;
50 }
1 #define INF 0xffffff
2 int i,j,k,l,edge[102][102],dist[102],instk[102],start,dest,n,m;
3 void spfa(int k)
4 {
5 int i;
6 instk[k]=1;
7 for(i=1;i<=n;i++)
8 {
9 if(dist[k]+edge[k][i]<dist[i])
10 {
11 dist[i]=dist[k]+edge[k][i];
12 if(instk[i]==0)spfa(i);
13 else return;
14 }
15 }
16 instk[k]=0;
17 }
18 main()
19 {
20 while(~scanf("%d%d",&n,&m))
21 {
22 scanf("%d%d",&start,&dest);
23 for(i=1;i<=n;i++)
24 {
25 for(j=1;j<=n;j++)edge[i][j]=INF;
26 dist[i]=INF,instk[i]=0,edge[i][i]=0;
27 }
28 for(k=1;k<=m;k++)
29 {
30 scanf("%d%d%d",&i,&j,&l);
31 edge[i][j]=edge[i][j]<l?edge[i][j]:l;
32 edge[j][i]=edge[i][j];
33 }
34 dist[start]=0;
35 spfa(start);
36 printf("%d\n",dist[dest]);
37 }
38 }