: Star
时间限制: C/C++ s Java/Python s 内存限制: MB 答案正确: 提交: 题目描述 31世纪,人类世界的科技已经发展到了空前的高度,星际移民,星际旅游早已经不再是问题。人类已经掌握了开发星系的能力。但是,无论发展到何种地步,资源一直是人们关注的重点。一种新的能源被人类掌握,通过它可以搭建虫洞,实现超光年传输。发展武器。但是虽然这种物质在宇宙海量的存在着,但它对于宇宙的稳定是至关重要的,若过量消耗这种物质,对于宇宙的稳定,星系与星系之间以及星系内部的微妙平衡都会产生巨大的影响。这种物质就是暗物质。 -----《宇宙百科》节选 现在,你所在的星系下有n个主星球居住着人民。为了星系内部的稳定与和平发展,现在需要在n个主星球之间建立空间虫洞,众所周知建立虫洞要消耗大量的暗物质,因此,你想要在n个主星球之间建立联系的情况下尽量少的消耗暗物质。目前你已经知道的是,建立虫洞所需要消耗的暗物质与两个星球之间的距离成正比,比例系数为k。并且,两个星球之间的距离为空间缩点距离。每个星球有它自己的三维物理坐标。不过,现在有一个好消息。你所在的星系掌握了一项新的技术,空间奇点压缩,简单来说就是降维,但是由于技术发展初期不够成熟,只能压缩一维。并且,任意两个主星球之间都可以选择是否进行空间奇点压缩。现在,你想知道,在这n个主星球之间建立连接需要花费的最少暗物质是多少。 空间缩点距离:设两个n维坐标a(x1,x2,x3,,,,xn),b(y1,y2,y3,y4,,,yn).设距离为s,则s=abs((x1+x2+x3+…+xn)−(y1+y2+y3+…+yn)); ----以上内容纯属瞎扯,请忽略其真实性 输入
第一行两个整数n和k。(≤n≤,≤k≤)
接下开n行,每行三个整数x,y,z,其中第i行表示第i个星球在星系中的物理坐标。数据保证没有两个星球处于同一个位置上。(≤x,y,z≤)
输出
n个主星球之间建立连接需要花费的最少暗物质。 样例输入 样例输出 提示
样例说明: 星球1和星球2之间压缩第三维 星球2和星球3之间压缩第二维 来源
Ocean_star_T
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <utility>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <cstdlib>
#include <cmath>
typedef long long ll;
#define lowbit(x) (x&(-x))
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
using namespace std;
#define pi acos(-1)
#define P pair<ll,ll>
const ll N = 1e5+;
ll n,k;
ll cnt;
int fa[N];
void init()
{
for(int i =;i<n;i++){
fa[i] = i;
}
cnt=;
}
struct Nod{
ll x,y,z,num;
}nod[N];
struct Edge{
ll fr,to,val;
}e[N*];
bool cmp1(Nod a,Nod b)
{
return a.y+a.z<b.y+b.z;
}
bool cmp2(Nod a,Nod b)
{
return a.x+a.z<b.x+b.z;
}
bool cmp3(Nod a,Nod b)
{
return a.x+a.y<b.x+b.y;
}
bool cmp4(Nod a,Nod b)
{
return a.x+a.y+a.z<b.x+b.y+b.z;
}
bool cmp5(Edge a,Edge b)
{
return a.val<b.val;
}
int find(int x)
{
return fa[x]=(x==fa[x]?x:find(fa[x]));
}
ll prim()
{
sort(e,e+cnt,cmp5);
int ans=n;
ll sum=;
for(int i =;i<cnt;i++)
{
if(ans>){
int x=find(e[i].fr),y=find(e[i].to);
if(x!=y){
fa[x] = y;
ans--;
sum+=e[i].val;
}
}
}
return sum;
}
int main()
{
scanf("%lld%lld",&n,&k);
for(int i =;i<n;i++){
scanf("%lld%lld%lld",&nod[i].x,&nod[i].y,&nod[i].z);
nod[i].num=i;
}
init();
sort(nod,nod+n,cmp1);
for(int i =;i<n-;i++)
{
e[cnt].fr=nod[i].num;
e[cnt].to=nod[i+].num;
e[cnt++].val=abs((nod[i].y+nod[i].z)-(nod[i+].y+nod[i+].z));
}
sort(nod,nod+n,cmp2);
for(int i =;i<n-;i++)
{
e[cnt].fr=nod[i].num;
e[cnt].to=nod[i+].num;
e[cnt++].val=abs((nod[i].x+nod[i].z)-(nod[i+].x+nod[i+].z));
}
sort(nod,nod+n,cmp3);
for(int i =;i<n-;i++)
{
e[cnt].fr=nod[i].num;
e[cnt].to=nod[i+].num;
e[cnt++].val=abs((nod[i].x+nod[i].y)-(nod[i+].x+nod[i+].y));
}
sort(nod,nod+n,cmp4);
for(int i =;i<n-;i++)
{
e[cnt].fr=nod[i].num;
e[cnt].to=nod[i+].num;
e[cnt++].val=abs((nod[i].x+nod[i].y+nod[i].z)-(nod[i+].x+nod[i+].y+nod[i+].z));
}
ll ret = prim();
printf("%lld\n",ret*k);
return ;
}

江西理工大学编程俱乐部 2328 Star的更多相关文章

  1. 江西理工大学南昌校区cool code竞赛

    这次比赛原本就是来打酱油的,想做个签到题就走!一开始不知道1002是签到题,一直死磕1001,WA了四发过了,回头一看Rank,三十名,我靠!看了1001的AC率,在我AC之前只有一个人AC了,当时我 ...

  2. 2018年江西理工大学C语言程序设计竞赛(初级组)一

     C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html  A: 逆序对 时间限制: 1 s      内存限制:  ...

  3. 2018年江西理工大学C语言程序设计竞赛高级组部分题解

    B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...

  4. 江西理工大学南昌校区acm选拔赛题解

    第一题略 第二题 #include<stdio.h> int main() { int a1,a2,a3,b1,b3,b2,c1,c2,c3,n,sum,d1,d2,d3,i; scanf ...

  5. 2016年江西理工大学C语言程序设计竞赛(高级组)

    问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...

  6. 2016年江西理工大学C语言程序设计竞赛(初级组)

    问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...

  7. 2015年江西理工大学C语言程序设计竞赛(高级组)

    A 解法:DP+二分 dp[i]=max(dp[i],dp[j]+p[i].v)(i>j) dp[i]表示建立i点之后能够获得的最大值 int n,M; struct node { int l, ...

  8. 2014江西理工大学C语言程序竞赛高级组

    Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...

  9. 2014江西理工大学C语言程序竞赛初级组

    坐公交 解法:略 #include<stdio.h> #include<string> #include<iostream> #include<math.h& ...

随机推荐

  1. enable orgmode latex preview to support retina on mac

    Table of Contents 1. enable orgmode latex preview to support retina on mac 1.1. get the proper versi ...

  2. Web框架的应用

    从今天开始,我们将要学习有关Web框架的一些内容,在学习之前先来学习一下http协议,即基于http是如何通信的. http 概要:http是基于tcp/ip通信协议来传输数据的. 优点: 1.简单快 ...

  3. Servlet和JavaBean

    1.Servlet简介: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...

  4. Java正则表达式—小应用—简易爬虫

         在上一篇中,学习了正则表达式的四个功能.即匹配.分割.替换.获取. 利用获取功能,可以实现简单的网页爬虫. 4,获取:将字符串中的符合规则的子串取出. 获取功能的操作步骤: 1,将正则表达式 ...

  5. javaweb 工程 tomcat启动报错的问你

    2015-03-03 14:39:32,657 INFO (org.springframework.web.context.ContextLoader:296) - Root WebApplicati ...

  6. D3 学习

    D3 学习笔记 D3简介 D3全称是Data-Driven Documents数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,但不仅仅只是这些.可以查看d3帮助文档还有 ...

  7. TP5.0:的安装与配置

    在网址中输入:localhost/安装TP5的文件夹/public/ 入口文件位置:public/index.php: 最新版本中,新建的文件夹是没有模型和视图的,需要自行添加没有的文件: 添加前: ...

  8. ubuntu16.4 配置logstash6.3.2 kibanan6.3.2

    1. 官网下载 https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz https://www.elastic.co ...

  9. IOS tableView的数据刷新

    1.tableView的刷新 1> 数据刷新的总体步骤 * 修改模型数据 * 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法 * 全局刷新(每一行都会重新刷新) - (void)r ...

  10. mongostat查看mongodb运行状态使用命令介绍

    mongostat是mongodb自带的一个用来查看mongodb运行状态的工具 使用说明 mongostat -h   字段说明 启用后的状况是这样的 insert query update del ...