int n, m; // 顶点数和边数
int d[100][100]; // 边(i,j)的权重
void read_and_init(){
cin >> n >> m;
// 初始化d
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
d[i][j] = INF;
}
d[i][i] = 0; // 初始化为0
}
for(int i = 0; i < m; i++){
int x, y, z;
cin >> x >> y >> z;
d[x][y] = z;
// d[y][x] = z; // 有向图!
}
}
void floyd(){
for(int k = 0; k < n; k++){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(d[i][k] < INF && d[k][j] < INF){
if(d[i][k] + d[k][j] < d[i][j]){
d[i][j] = d[i][k] + d[k][j];
}
}
}
}
}
}