題意:
讓你找出至少包含三個點並且值的總和最小的環。
const int maxn = 110;
const i64 INF = INT_MAX;
i64 G[maxn][maxn], dis[maxn][maxn], ans, n;
void floyd() {
int i, j, k;
for (k = 1; k <= n; ++k) {
for (i = 1; i < k; ++i) {
if (G[k][i] == INF) continue;
for (j = i+1; j < k; ++j) {
if (G[k][j] == INF) continue;
ans = min(ans, G[k][i]+G[k][j]+dis[i][j]);
}
}
for (i = 1; i <= n; ++i) {
if (dis[i][k] == INF) continue;
for (j = 1; j <= n; ++j) {
if (dis[k][j] == INF) continue;
dis[i][j] = min(dis[i][j], dis[i][k]+dis[k][j]);
}
}
}
}
int main() {
i64 m, a, b, w;
while (cin >> n >> m) {
for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) G[i][j] = INF;
for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) dis[i][j] = INF;
ans = INF;
forn(i, m) {
cin >> a >> b >> w;
G[a][b] = G[b][a] = dis[a][b] = dis[b][a] = min(G[a][b], w);
}
floyd();
if (ans == INF) cout << "It's impossible." << '\n';
else cout << ans << '\n';
}
return 0;
}