江西理工大学编程俱乐部 2328 Star
: 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的更多相关文章
- 江西理工大学南昌校区cool code竞赛
这次比赛原本就是来打酱油的,想做个签到题就走!一开始不知道1002是签到题,一直死磕1001,WA了四发过了,回头一看Rank,三十名,我靠!看了1001的AC率,在我AC之前只有一个人AC了,当时我 ...
- 2018年江西理工大学C语言程序设计竞赛(初级组)一
C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html A: 逆序对 时间限制: 1 s 内存限制: ...
- 2018年江西理工大学C语言程序设计竞赛高级组部分题解
B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...
- 江西理工大学南昌校区acm选拔赛题解
第一题略 第二题 #include<stdio.h> int main() { int a1,a2,a3,b1,b3,b2,c1,c2,c3,n,sum,d1,d2,d3,i; scanf ...
- 2016年江西理工大学C语言程序设计竞赛(高级组)
问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...
- 2016年江西理工大学C语言程序设计竞赛(初级组)
问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...
- 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, ...
- 2014江西理工大学C语言程序竞赛高级组
Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...
- 2014江西理工大学C语言程序竞赛初级组
坐公交 解法:略 #include<stdio.h> #include<string> #include<iostream> #include<math.h& ...
随机推荐
- 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 ...
- Web框架的应用
从今天开始,我们将要学习有关Web框架的一些内容,在学习之前先来学习一下http协议,即基于http是如何通信的. http 概要:http是基于tcp/ip通信协议来传输数据的. 优点: 1.简单快 ...
- Servlet和JavaBean
1.Servlet简介: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- Java正则表达式—小应用—简易爬虫
在上一篇中,学习了正则表达式的四个功能.即匹配.分割.替换.获取. 利用获取功能,可以实现简单的网页爬虫. 4,获取:将字符串中的符合规则的子串取出. 获取功能的操作步骤: 1,将正则表达式 ...
- javaweb 工程 tomcat启动报错的问你
2015-03-03 14:39:32,657 INFO (org.springframework.web.context.ContextLoader:296) - Root WebApplicati ...
- D3 学习
D3 学习笔记 D3简介 D3全称是Data-Driven Documents数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,但不仅仅只是这些.可以查看d3帮助文档还有 ...
- TP5.0:的安装与配置
在网址中输入:localhost/安装TP5的文件夹/public/ 入口文件位置:public/index.php: 最新版本中,新建的文件夹是没有模型和视图的,需要自行添加没有的文件: 添加前: ...
- 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 ...
- IOS tableView的数据刷新
1.tableView的刷新 1> 数据刷新的总体步骤 * 修改模型数据 * 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法 * 全局刷新(每一行都会重新刷新) - (void)r ...
- mongostat查看mongodb运行状态使用命令介绍
mongostat是mongodb自带的一个用来查看mongodb运行状态的工具 使用说明 mongostat -h 字段说明 启用后的状况是这样的 insert query update del ...