MST
class KingdomXCitiesandVillagesAnother { public: double etermineLength(vector <int> cX, vector <int> cY, vector <int> vX, vector <int> vY) { const int C = cX.size(); const int V = vX.size(); bool vis[V]; fill(vis, vis + V, false); double cost[V]; fill(cost, cost + V, 1e256); for (int v = 0; v < V; ++v) { for (int c = 0; c < C; ++c) { double x = cX[c] - vX[v]; double y = cY[c] - vY[v]; cost[v] = min(cost[v], sqrt(x * x + y * y)); } } while (true) { double mn = 1e256; int idx = -1; for (int v = 0; v < V; ++v) { if (!vis[v] && mn > cost[v]) { idx = v; mn = cost[v]; } } if (idx == -1) break; vis[idx] = true; for (int v = 0; v < V; ++v) { if (vis[v]) continue; double x = vX[idx] - vX[v]; double y = vY[idx] - vY[v]; cost[v] = min(cost[v], sqrt(x * x + y * y)); } } return accumulate(cost, cost + V, 0.0); } };
0 件のコメント :
コメントを投稿