給定 N (≤2000) 個卡車型號(長度 7 字符串),定義兩型號間距離為對應字符不同的個數。求連接所有型號的最小生成樹總權重(即最小化總差異)。
int dist(int i, int j) {
int d = 0;
for (int k = 0; k < 7; ++k) if (a[i][k] != a[j][k]) ++d;
return d;
}
int prim() {
vector minDist(n, INF);
vector vis(n, false);
minDist[0] = 0;
int ans = 0;
for (int i = 0; i < n; ++i) {
int u = -1;
for (int j = 0; j < n; ++j)
if (!vis[j] && (u == -1 || minDist[j] < minDist[u])) u = j;
vis[u] = true;
ans += minDist[u];
for (int v = 0; v < n; ++v)
if (!vis[v]) minDist[v] = min(minDist[v], dist(u, v));
}
return ans;
}
mapp[i][j],避免重複計算字符差異。vector 替代靜態數組,自動管理內存。cin 關閉同步或 scanf 加速。The highest possible quality is 1/<ans>(注意題目原文輸出要求)。POJ 1789 是稠密圖 Prim 算法的教科書級例題。關鍵在於識別「完全圖 + 權重為字符差異」特徵,果斷選用 O(N²) Prim 而非 Kruskal。預計算距離矩陣、簡潔的 Prim 實現、正確的輸出格式是 AC 關鍵。