voidFloyd(){ for (k = 1; k <= n; k++) for (p = 1; p <= n; p++) for (q = 1; q <= n; q++) if (dist[p][q] - dist[p][k] > dist[k][q]) dist[p][q] = dist[p][k] + dist[k][q]; }
intmain(){ int m; int x, y, w, tmp; LL ret = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { scanf("%I64d", &dist[i][j]); } } Floyd(); for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) ret += dist[i][j]; scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d%d%d", &x, &y, &w); if (x > y) swap(x, y); if (w < dist[x][y]) { for (int j = 1; j <= n; j++) { for (int k = j + 1; k <= n; k++) { tmp = dist[j][k]; if (dist[j][x] + w + dist[y][k] < dist[j][k]) dist[j][k] = dist[j][x] + w + dist[y][k]; if (dist[j][y] + w + dist[x][k] < dist[j][k]) dist[j][k] = dist[j][y] + w + dist[x][k]; if (dist[j][k] < tmp) { ret -= tmp - dist[j][k]; dist[k][j] = dist[j][k]; } } } } if (i) printf(" "); printf("%I64d", ret); } printf("\n"); return0; }