justoj connect(边的处理)
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
3
1 1 1
2 3 4
5 5 5
Sample Output
2
思路:本质是最小生成树。需要对边进行处理。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 200000 + 5;
struct Edge
{
    ll u,v,dis;
};
struct Point
{
    ll x,y,z,index;
};
Edge edge[maxn*3];
Point point[maxn];
int fa[maxn];
ll edgenum;
ll res;
bool cmpx(Point a,Point b)
{
    return a.x<b.x;
}
bool cmpy(Point a,Point b)
{
    return a.y<b.y;
}
bool cmpz(Point a,Point b)
{
    return a.z<b.z;
}
bool cmpdis(Edge a,Edge b)
{
    return a.dis<b.dis;
}
int find(int x)
{
    while(x!=fa[x])
    x=fa[x]=fa[fa[x]];
    return x;
}
int main()
{
    ll n;
    scanf("%lld",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lld%lld%lld",&point[i].x,&point[i].y,&point[i].z);
        point[i].index=i;
    }
    edgenum=0;
    sort(point,point+n,cmpx);
    for(int i=0;i<n-1;i++)
    {
        edge[edgenum].u=point[i+1].index;
        edge[edgenum].v=point[i].index;
        edge[edgenum].dis=point[i+1].x-point[i].x;
        edgenum++;
    }
    sort(point,point+n,cmpy);
    for(int i=0;i<n-1;i++)
    {
        edge[edgenum].u=point[i+1].index;
        edge[edgenum].v=point[i].index;
        edge[edgenum].dis=point[i+1].y-point[i].y;
        edgenum++;
    }
    sort(point,point+n,cmpz);
    for(int i=0;i<n-1;i++)
    {
        edge[edgenum].u=point[i+1].index;
        edge[edgenum].v=point[i].index;
        edge[edgenum].dis=point[i+1].z-point[i].z;
        edgenum++;
    }
    sort(edge,edge+edgenum,cmpdis); //把每条边从小到大排
    for(int i=0;i<n;i++)
    fa[i]=i;
    int eu,ev,cnt=0;
    for(int i=0;i<edgenum;i++)
    {
        eu=find(edge[i].u);
        ev=find(edge[i].v);
        if(eu!=ev){
        fa[ev]=eu;
        res+=edge[i].dis;
        cnt++;
        }
        if(cnt==n-1) break;
    }
    printf("%lld\n",res);
    return 0;
}
												
											justoj connect(边的处理)的更多相关文章
- Connect() 2016 大会的主题 ---微软大法好
		
文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...
 - IdentityServer4 使用OpenID Connect添加用户身份验证
		
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
 - 2003-Can't connect to mysql server on localhost (10061)
		
mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...
 - 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- ...
 - 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 ...
 - IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
		
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
 - Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
		
转自ti-wiki 这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...
 - Action.c(58): Error -27796: Failed to connect to server "hostname"
		
分析: 因为负载生成器的性能太好发数据特别快,服务器响应也特别快,从而导致负载生成器的端口在没有timeout之前就全部占满了. 解决方案一: 在负载生成器的注册表HKEY_LOCAL_MACHI ...
 - VNC connect:Connection refused(10061)
		
在Windows机器上使用VNC Viewer访问Linux服务器,有时候会遇到"connect:Connection refused(10061)"这个错误,导致这个错误出现的原 ...
 
随机推荐
- mybatis面试入门
			
第一步创建一个java project 导入mybatis需要的jar包,创建与数据库一一对应的javabean对象 第二步:创建mybatis的配置文件 sqlMapconfig.xml 第三步:创 ...
 - JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去…
			
JavaScript 格式化数字.金额.千分位.保留几位小数.舍入舍去… 类库推荐 1. Numeral.js 一个用于格式化和操作数字的JavaScript库.数字可以被格式化为货币,百分比,时间, ...
 - 蝙蝠算法(BA)学习笔记
			
算法原理 蝙蝠能够在夜间或十分昏暗的环境中自由飞翔和准确无误地捕捉食物,是因为他们能够从喉头发出地超声脉冲回声来定位.受这一启发,Yang教授在2010年提出了蝙蝠算法(Bat Algorithm,B ...
 - 入门大数据---Hive视图和索引
			
一.视图 1.1 简介 Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集.视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0 ...
 - 使用docker创建mysql容器
			
1.拉取mysql容器 docker pull mysql:5.7
 - python实现将大文件夹分割成多个子文件夹
			
楼主用的linux,一旦数据达到几万,文件夹打开就会变卡,同时也方便同时分工协作,便于git管理,写了个将大文件夹分割成多个小文件夹的脚本 如操作文件夹:img,脚本不破坏img的数据,创建img_1 ...
 - .NET Core下开源任务调度框架Hangfire
			
今天无意中发现了一个很好用的任务调度框架.Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在 .net core的环境中,由Core自带的DI管理着生命周期. 相较于qu ...
 - 序列推荐(transformer)
			
目录 Attention演进(RNN&LSTM&GRU&Seq2Seq + Attention机制) LSTM GRU Seq2Seq + Attention机制 Attent ...
 - Zuul请求超时
			
最近在弄springcloud的时候发现在发送短信的时候zuul总是报错,错误信息如下 com.netflix.zuul.exception.ZuulException: at org.springf ...
 - Centos 下 Jenkins2.6 + Git + Maven Shell一件部署与备份
			
使用Jenkins2.6 集成Maven与Git插件做持续集成,同时编写Shell脚本备份与发布(需要稍微知道点Linux/毕竟基于Centos PS:本人Linux也是菜鸡) - 下载Jenkins ...