: 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. KendoUI 自定义验证:

    Html: <label>@LogicNameAttribute.GetLogicName(typeof(Reward).GetProperty("ExtraRewardMone ...

  2. CCflow6 的使用

    sELECT * FROM WF_GENERWORKFLOW        WHERE WorkID=00000 -- 查看流程状态 wf_selectaccpter --查看流程某个节点下的人员 M ...

  3. C# 获取文件夹下所有的文件

    static void getAllFileNameInDir(string path, ref List<string> files) { DirectoryInfo folder = ...

  4. 3D向2D投影

    http://blog.sina.com.cn/s/blog_536e0eaa0100jn7j.html

  5. 重置SQLSERVER表的自增列,让自增列重新计数【转】

    很多时候我们需要重置某个表的自增列,让自增列重新从1开始记数.最蠢的方法当然是把该表删掉再重新建表了.其实,还有其它的方法可以重置自增列的值: 方法一:使用TRUNCATE TABLE语句: TRUN ...

  6. sweetalert 1.0多次回调函数bug

    一个删除功能,原来的实现方式(注释部分)有多次的回调,会出现第二个swal窗口不显示,回调函数体不执行的情况.后来的解决方式是使用bootstrap的modal模态框,删除成功后显示模态框,模态框关闭 ...

  7. hihocoder 第四十周 三分求极值

    题目链接:http://hihocoder.com/contest/hiho40/problem/1 ,一道简单的三分. 题目是在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求 ...

  8. leetcode--5 Longest Palindromic Substring

    1. 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximu ...

  9. linux 命令——6 rmdir(转)

    今天学习一下linux中命令: rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删 ...

  10. cesium加载shp格式数据

    方法一: shp格式转换为GeoJson格式并加载 首先注意shp的坐标系,要转换为WGS84,使用arcgis或QGIS 工具:http://mapshaper.org/: 注意:export时,输 ...