CONNECT

https://oj.ismdeep.com/contest/problem?id=1702&pid=2

Problem Description

有nn个顶点,每个顶点有自己的坐标(Xi,Yi,Zi)(Xi,Yi,Zi),现在想把这nn个顶点连接起来,已知连接两个顶点uu和vv的花费是MIN(|Xu−Xv|,|Yu−Yv|,|Zu−Zv|) 。现在,请花费最小的代价把这些点连接起来。

Input

第一行输入一个整数n (1≤n≤2∗105)n (1≤n≤2∗105)

接下来nn行,第ii行包含33个整数XiXi,YiYi和ZiZi(|Xi|,|Yi|,|Zi|≤109)(|Xi|,|Yi|,|Zi|≤109),代表第ii个点的坐标,数据保证不会有任意两个点的坐标相同

Output

输出最小代价

Sample Input

  1. 3
  2. 1 1 1
  3. 2 3 4
  4. 5 5 5

Sample Output

  1. 2

思路:本质是最小生成树。需要对边进行处理。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn = 200000 + 5;
  7. struct Edge
  8. {
  9. ll u,v,dis;
  10. };
  11. struct Point
  12. {
  13. ll x,y,z,index;
  14. };
  15. Edge edge[maxn*3];
  16. Point point[maxn];
  17. int fa[maxn];
  18. ll edgenum;
  19. ll res;
  20. bool cmpx(Point a,Point b)
  21. {
  22. return a.x<b.x;
  23. }
  24. bool cmpy(Point a,Point b)
  25. {
  26. return a.y<b.y;
  27. }
  28. bool cmpz(Point a,Point b)
  29. {
  30. return a.z<b.z;
  31. }
  32. bool cmpdis(Edge a,Edge b)
  33. {
  34. return a.dis<b.dis;
  35. }
  36. int find(int x)
  37. {
  38. while(x!=fa[x])
  39. x=fa[x]=fa[fa[x]];
  40. return x;
  41. }
  42. int main()
  43. {
  44. ll n;
  45. scanf("%lld",&n);
  46. for(int i=0;i<n;i++)
  47. {
  48. scanf("%lld%lld%lld",&point[i].x,&point[i].y,&point[i].z);
  49. point[i].index=i;
  50. }
  51. edgenum=0;
  52. sort(point,point+n,cmpx);
  53. for(int i=0;i<n-1;i++)
  54. {
  55. edge[edgenum].u=point[i+1].index;
  56. edge[edgenum].v=point[i].index;
  57. edge[edgenum].dis=point[i+1].x-point[i].x;
  58. edgenum++;
  59. }
  60. sort(point,point+n,cmpy);
  61. for(int i=0;i<n-1;i++)
  62. {
  63. edge[edgenum].u=point[i+1].index;
  64. edge[edgenum].v=point[i].index;
  65. edge[edgenum].dis=point[i+1].y-point[i].y;
  66. edgenum++;
  67. }
  68. sort(point,point+n,cmpz);
  69. for(int i=0;i<n-1;i++)
  70. {
  71. edge[edgenum].u=point[i+1].index;
  72. edge[edgenum].v=point[i].index;
  73. edge[edgenum].dis=point[i+1].z-point[i].z;
  74. edgenum++;
  75. }
  76. sort(edge,edge+edgenum,cmpdis); //把每条边从小到大排
  77. for(int i=0;i<n;i++)
  78. fa[i]=i;
  79. int eu,ev,cnt=0;
  80. for(int i=0;i<edgenum;i++)
  81. {
  82. eu=find(edge[i].u);
  83. ev=find(edge[i].v);
  84. if(eu!=ev){
  85. fa[ev]=eu;
  86. res+=edge[i].dis;
  87. cnt++;
  88. }
  89. if(cnt==n-1) break;
  90. }
  91. printf("%lld\n",res);
  92. return 0;
  93. }

justoj connect(边的处理)的更多相关文章

  1. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

  2. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  3. 2003-Can't connect to mysql server on localhost (10061)

    mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...

  4. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  5. HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)

    前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...

  6. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  7. Connect to the DSP on C6A8168/DM8168/DM8148 using CCS

    转自ti-wiki  这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...

  8. Action.c(58): Error -27796: Failed to connect to server "hostname"

    分析: 因为负载生成器的性能太好发数据特别快,服务器响应也特别快,从而导致负载生成器的端口在没有timeout之前就全部占满了. 解决方案一:   在负载生成器的注册表HKEY_LOCAL_MACHI ...

  9. VNC connect:Connection refused(10061)

    在Windows机器上使用VNC Viewer访问Linux服务器,有时候会遇到"connect:Connection refused(10061)"这个错误,导致这个错误出现的原 ...

随机推荐

  1. ubuntu无法安装vim、tree等解决办法

    rm /etc/apt/sources.list.d/* 删除该目录下所有文件

  2. Docker文件系统实战

    关键词:Docker 联合文件系统 镜像 容器 云信私有化 在本文中,我们来实战构建一个Docker镜像,然后实例化容器,在Docker的生命周期中详细分析一下Docker的文件存储情况和Docker ...

  3. 【数据库内核】RocksDB:事务锁设计与实现

    本文主要介绍 RocksDB 锁结构设计.加锁解锁过程,并与 InnoDB 锁实现做一个简单对比. 本文由作者授权发布,未经许可,请勿转载. 作者:王刚,网易杭研数据库内核开发工程师 MyRocks ...

  4. python抓取头条文章

    python抓取头条美文并存储到mongodb # Author:song from multiprocessing import Pool from urllib.parse import urle ...

  5. 基础设计模式-03 从过滤器(Filter)校验链学习职责链模式

    1.职责链路模式 1.1UML图 1.2 职责链路模式的概念 为了避免处理对象的耦合关系,将对象连成一个链,沿着这个链进行访问,直到有一个对象处理位置: 1.3 优点 1.按照一定的顺序执行判断: 2 ...

  6. 6.26模拟赛(1)总结(T1:信息传递;T2:传染病控制;T3:排列;T4:最大数)

    16:33:56 2020-06-26 当然可以先看一下成绩: 非常显然的成绩不能算有多好,当然其实这也可能是假期水课的报应  (额) 但是比我集训前想象的要好一点(集训时想象的是排名前30就可以,嗯 ...

  7. 状压DP之互不侵犯

    题目描述 这里 在\(N*N\) 的棋盘里面放\(k\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式 只有 ...

  8. 洛谷 P1131 [ZJOI2007]时态同步 树形DP

    题目描述 分析 我们从根节点开始搜索,搜索到叶子节点,回溯的时候进行维护 先维护节点的所有子节点到该节点最大边权(边权为叶子节点到同时到达它所需要时间) 然后维护答案,答案为最大边权减去所有到子节点的 ...

  9. 宁波市第三届网络安全大赛-WriteUp(Misc)

    友情链接 Web师傅:skyxmao师傅 内心OS 第一次参加这种大型比赛,实力较菜,请师傅们多多指点 Misc | 完成 | 第一 下载文件,看一下doc没有任何问题, 没有发现任何隐写,然后修改文 ...

  10. Scala 面向对象(一):类与对象基础(一)

    1 如何定义类 [修饰符] class 类名 { 类体 } 定义类的注意事项 1)scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public), 2)一个Scala ...