: 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. Day2下午

    虽然成绩不太好,但有点进入状态了.期望200 实际160,忘记加判断了. T1 洗澡[问题描述]你是能看到第一题的friends 呢.——hja洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代 ...

  2. JAVA 面试重点知识个人总结

    一.集合: 1 .Collection(是java.util下的接口) 和 Collections(是java.util下的类). 2 .List, Set,是否继承自Collection接口,Map ...

  3. poj3334(Connected Gheeves)

    Connected Gheeves Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1008   Accepted: 368 ...

  4. fish 常用主题推荐

    在安装fish的前提下 omf install zish omf theme zish zish

  5. 【Mood-14】龙虎榜 活跃在github中的1000位中国开发者

    Last cache created on 2015-01-07 by Github API v3. ♥ made by hzlzh just for fun. Rank Gravatar usern ...

  6. javascript设计模式之中介者模式

    /* * 小游戏演示中介者模式 * Home 按键 1 * Guest 按键 0 * 半分钟内看谁按下的次数多 * * 参与的对象: * 玩家 * 计分板 * 中介者 * * 中介者模式使对象之间松耦 ...

  7. GIT教程笔记

    GIT的工作流程: 先在工作目录中添加.修改文件 一般是在工作目录建立你的工程文件夹,然后通过命令行进入文件夹后  git init 初始化 将需要进行版本管理的文件放入缓存区  git add 文件 ...

  8. OpenCV之CvMat、Mat、IplImage之间相互转换实例(转)

    OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数.初学者应该掌握并熟练应用.但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能 ...

  9. [转载]AngularJS入门教程03:迭代器

    我们在上一步做了很多基础性的训练,所以现在我们可以来做一些简单的事情喽.我们要加入全文检索功能(没错,这个真的非常简单!).同时,我们也会写一个端到端测试,因为一个好的端到端测试可以帮上很大忙.它监视 ...

  10. javaweb基础(27)_jsp标签库实例

    一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...