Connect the Campus(最小生成树+并查集)

<cstring>;const int maxn = 755;const int maxm = 3e5;struct Node {int x, y;}node[maxn];double w[maxm];int p[maxn], u[maxm], v[maxm];int vis[maxn][maxn], r[maxm];i, int j) {double x = node[i].x – node[j].x;double y = node[i].y – node[j].y;return sqrt(x * x + y * y);}n) {for (int i = 0; i < n; i++)p[i] = i;}x) {return (x == p[x]) ? p[x] : p[x] = getParent(p[x]);}i, int j) {return w[i] < w[j];}n, int m) {double ans = 0;init(n);for (int i = 0; i < m; i++)r[i] = i;sort(r, r + m, cmp);for (int i = 0; i < m; i++) {int P = getParent(u[r[i]]);int Q = getParent(v[r[i]]);if (P == Q) continue;ans += w[r[i]];p[P] = Q;}return ans;}{int n, m;while (scanf ("%d", &n) != EOF) {for (int i = 0; i < n; i++)scanf ("%d%d", &node[i].x, &node[i].y);int x, y;memset (vis, 0, sizeof(vis));scanf ("%d", &m);for (int i = 0; i < m; i++) {scanf ("%d%d", &x, &y);vis[x – 1][y – 1] = vis[y – 1][x – 1] = 1;}int pos = 0;for (int i = 0; i < n; i++)for (int j = i + 1; j < n; j++) {u[pos] = i;v[pos] = j;if (vis[i][j])w[pos++] = 0;elsew[pos++] = dist(i, j);}printf ("%.2lf\n", Kruskal(n, pos));}return 0;}

,像一颗深绿色的宝石镶嵌在云南大地上,

Connect the Campus(最小生成树+并查集)

相关文章:

你感兴趣的文章:

标签云: