int n,m;
int g[maxn][maxn];
int dis[maxn][maxn],pre[maxn][maxn];
int path[maxn];
int ans,top;
void floyd(){
for(int k = 1; k <= n; k++ ){
int tmp;
for(int i = 1; i < k; i++ ){
for(int j = i+1; j < k; j++){
tmp=dis[i][j]+g[i][k]+g[k][j];
if(tmp<ans){
ans=tmp;
top=0;
int p=j;
while(p!=i){
path[top++]=p,p=pre[i][p];
}
path[top++]=i;
path[top++]=k;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dis[i][j]>dis[i][k]+dis[k][j]){
dis[i][j]=dis[i][k]+dis[k][j];
pre[i][j]=pre[k][j];
}
}
}
}
}