曼哈顿距离MST
https://www.cnblogs.com/xzxl/p/7237246.html
讲的不错
/*
曼哈顿距离最小生成树 poj 3241 Object Clustering
按照上面的假设我们先考虑y周顺时针45°的情况
dis(i,j)=x[j]-x[i]+y[j]-y[i]=x[j]+y[j]-(x[i]+x[j])
dis取决于x[j]+y[j] 所以排序的关键字就是x+y
然后我们按y-x离散化 然后维护 y-x大于当前点 的点中
x+y最小的点 时间复杂度NlogN
最大生成树的话 不具有对称性 需要往8个方向都搞一遍
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 100010
using namespace std;
int n,k,m,num,s[maxn],vl[maxn],idex[maxn],a[maxn],b[maxn],fa[maxn];
struct node{
int x,y,id;
}poi[maxn];
struct edge{
int u,v,t;
}e[maxn*];
int cmp1(const node &A,const node &B){
if(A.x==B.x)return A.y<B.y;
return A.x<B.x;
}
int cmp2(const edge &A,const edge &B){
return A.t<B.t;
}
void Add(int u,int v,int t){
num++;e[num].u=u;
e[num].v=v;e[num].t=t;
}
int Abs(int x){
return x>?x:-x;
}
int Cal(int i,int j){
return Abs(poi[i].x-poi[j].x)+Abs(poi[i].y-poi[j].y);
}
int find(int x){
return x==fa[x]?x:fa[x]=find(fa[x]);
}
void Insert(int pos,int val,int id){
while(pos){
if(vl[pos]>val){
vl[pos]=val;idex[pos]=id;
}
pos-=(pos&-pos);
}
}
int Query(int pos){
int res=-,mx=1e9+;
while(pos<=n){
if(mx>vl[pos]){
mx=vl[pos];res=idex[pos];
}
pos+=(pos&-pos);
}
return res;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%d%d",&poi[i].x,&poi[i].y);
poi[i].id=i;
}
for(int K=;K<=;K++){
memset(vl,/,sizeof(vl));
memset(idex,-,sizeof(idex));
if(K==||K==)
for(int i=;i<=n;i++)
swap(poi[i].x,poi[i].y);
else if(K==)
for(int i=;i<=n;i++)
poi[i].x=-poi[i].x;
sort(poi+,poi++n,cmp1);
for(int i=;i<=n;i++)// 按照y-x进行离散化
a[i]=b[i]=poi[i].y-poi[i].x;
sort(b+,b++n);
m=unique(b+,b++n)-b-;
for(int i=n;i>=;i--){
int pos=lower_bound(b+,b++m,a[i])-b;
int res=Query(pos);
if(res!=-)
Add(poi[i].id,poi[res].id,Cal(i,res));
Insert(pos,poi[i].x+poi[i].y,i);
}
}
sort(e+,e++num,cmp2);
for(int i=;i<=n;i++)fa[i]=i;
int cnt=n-k;
for(int i=;i<=num;i++){
if(find(e[i].u)==find(e[i].v))continue;
fa[find(e[i].u)]=find(e[i].v);
cnt--;if(cnt==){
printf("%d\n",e[i].t);break;
}
}
return ;
}
曼哈顿距离MST的更多相关文章
- [HDU 4666]Hyperspace[最远曼哈顿距离][STL]
题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态 ...
- HDU 4666 Hyperspace (最远曼哈顿距离)
Hyperspace Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- HDU 4666 Hyperspace (2013多校7 1001题 最远曼哈顿距离)
Hyperspace Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...
- Hdu4311 || 4312Meeting point-1/-2 n个点中任意选一个点使得其余点到该点曼哈顿距离之和最小
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- Atitti knn实现的具体四个距离算法 欧氏距离、余弦距离、汉明距离、曼哈顿距离
Atitti knn实现的具体四个距离算法 欧氏距离.余弦距离.汉明距离.曼哈顿距离 1. Knn算法实质就是相似度的关系1 1.1. 文本相似度计算在信息检索.数据挖掘.机器翻译.文档复制检测等领 ...
- 【POJ 3241】Object Clustering 曼哈顿距离最小生成树
http://poj.org/problem?id=3241 曼哈顿距离最小生成树模板题. 核心思想是把坐标系转3次,以及以横坐标为第一关键字,纵坐标为第二关键字排序后,从后往前扫.扫完一个点就把它插 ...
- 【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)
题目链接 正经解法: 给定n个点的坐标,找一个点,到其他点的曼哈顿距离之和最小.n可以是100000.大概要一个O(nlogn)的算法.算曼哈顿距离可以把x和y分开计算排好序后计算前缀和就可以在O(1 ...
- hdu4666 Hyperspace ——曼哈顿距离
link:http://acm.hdu.edu.cn/showproblem.php?pid=4666 这题学会了怎么处理曼哈顿距离. 比如维数是k,那么每个点有2^k个状态,求出在每个状态下,所有点 ...
随机推荐
- SSH Secure Shell Client连接centos6.5时中文字乱码处理
在学习Linux的过程中,最先碰到的是通过SSH终端连接时发现有乱码出现,使用这篇文章先从这里说起. 在 ssh , telnet 终端中文显示乱码解决办法#vim /etc/sysconfig/i1 ...
- VC socket api使用引入
1.在创建项目时勾上windows socket api的使用 2.头文件 #pragma comment(lib,"WS2_32.lib") 3.初始化 WSADATA dat ...
- 如何成为一名出色的Oracle数据库管理员
主要针对Oracle DBA在成长阶段的定位,学习方法等几大方面进行了经典的论述,详细内容请参考下文. 一.定位 Oracle分两大块,一块是开发,一块是管理.开发主要是写写存储过程.触发器什么的,还 ...
- ElasticSearch-5.21安装
环境 操作系统:Centos 6.5 X64 IP地址:192.168.56.100 JDK 环境: # java -version java version "1.8.0_121" ...
- CentOS7配置VSFTP服务器
[1] 安装VSFTP [root@localhost ~]# yum -y install vsftpd [2] 配置vsftpd.conf文件 [root@localhost ~]# vi /et ...
- javascript的严格模式:use strict
ECMAscript 5添加的运行模式,禁止一些非标准.不安全的操作. <script> "use strict"; console.log("这是严格模式. ...
- Codeforces_The least round way
B. The least round way time limit per test 2 seconds memory limit per test 64 megabytes input standa ...
- R包
查看默认安装包的位置 .libPaths() 移除包 remove.packages("package_name") 查看所有安装的包 library() 按 q 退出包列表 ...
- css知识框架
- 简述prototype, _proto_, constructor三者的关系
1.prototype 感概:每个函数都有一个prototype这个属性,而这个属性指向一个对象,这个对象称为原型对象 作用: a.节约内存 b.扩展属性和方法 c.实现类与类的之间的继承 2._pr ...