1 #include<stdio.h>
2 #include<string.h>
3 #define MAXN 101
4 #define INF 0x3fffffff
5
6 int g[MAXN][MAXN],n,m,dist[MAXN],result[MAXN],vis[MAXN];
7 void read();
8 void Dijkstra(int s);
9 int main(){
10 read();
11 int i,j,maxlen=INF,index=-1;
12 memset(result,0,sizeof(result));
13 for(i=1;i<=n;i++){
14 Dijkstra(i);
15 maxlen=0;
16 for(j=1;j<=n;j++){
17 if(dist[j]==INF) {
18 result[i] = INF;
19 break;
20 }
21 if(dist[j]>maxlen && dist[j]!=INF) maxlen = dist[j];
22 }
23 if(result[i]!=INF){
24 result[i] = maxlen;
25 }
26 }
27 maxlen = INF;
28 for(i=1;i<=n;i++){
29 if(result[i]!=INF && result[i]<maxlen ){
30 maxlen = result[i];
31 index = i;
32 }
33 }
34 if(index==-1) printf("0\n");
35 else printf("%d %d\n",index,maxlen);
36 return 0;
37 }
38 void read(){
39 scanf("%d %d",&n,&m);
40 int u,v,w,i,j;
41 for(i=1;i<=n;i++)
42 for(j=1;j<=n;j++)
43 g[i][j] = INF;
44
45 for(i=1;i<=m;i++){
46 scanf("%d %d %d",&u,&v,&w);
47 g[u][v] = w;
48 g[v][u] = w;
49
50 }
51 }
52 void Dijkstra(int s){
53 //fill(dist,dist+MAXN,INF);
54 //fill(vis,vis+MAXN,0);
55 for(int i=1;i<=n;i++)
56 dist[i] = INF;
57 for(int i=1;i<=n;i++)
58 vis[i] = 0;
59 int mdata,mindex,i;
60 dist[s] =0;
61 while(1){
62 mdata = INF;
63 mindex = -1;
64 for(i=1;i<=n;i++){
65 if(dist[i]<mdata&&vis[i]==0){
66 mdata = dist[i];
67 mindex = i;
68 }
69 }
70 if(mindex==-1) break;
71 vis[mindex] = 1;
72 for(i=1;i<=n;i++){
73 if(vis[i]==0&&g[mindex][i]!=INF&&mindex!=i){
74 if(dist[mindex]+g[mindex][i]<dist[i]){
75 dist[i] = dist[mindex] + g[mindex][i];
76 }
77 }
78 }
79
80 }
81 }