首页 > 其他 > 详细

LeetCode 每日一题

时间:2021-01-19 19:44:18      阅读:23      评论:0      收藏:0      [点我收藏+]

1. 1584. 连接所有点的最小费用

简单并查集,最多1000个点,把所有连接情况搞出来,按距离从小到大排序,跑个并查集。

技术分享图片
 1 class Solution {
 2 public:
 3     struct node{
 4         int p1, p2, d;
 5     }line[1000005];
 6     static bool cmp(node x, node y) {
 7         return x.d < y.d;
 8     }
 9     int fa[1000005];
10     int fi(int x) {
11         return fa[x] == x ? x : fa[x] = fi(fa[x]);
12     }
13     int minCostConnectPoints(vector<vector<int>>& points) {
14         int n = points.size(), m = 0, ans = 0;
15         for (int i = 0; i < n; i++) fa[i] = i;
16         for (int i = 0; i < n; i++) {
17             for (int j = i + 1; j < n; j++) {
18                 line[m].p1 = i; line[m].p2 = j; 
19                 line[m].d = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1]);
20                 m++;
21             }
22         }
23         sort(line, line + m, cmp);
24         for (int i = 0; i < m; i++) {
25             int fx = fi(line[i].p1);
26             int fy = fi(line[i].p2);
27             if (fx != fy) {
28                 fa[fx] = fy;
29                 ans += line[i].d;
30             }
31         }
32         return ans;
33     }
34 };
View Code

 

LeetCode 每日一题

原文:https://www.cnblogs.com/pavtlly/p/14299375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!