poj3241 曼哈顿最小生成树

曼哈顿距离最小生成树 转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove 二维平面中有一些点,两点之间的距离为曼哈顿距离,求最小生成树。 朴素的n个点,只能做到O(n^3)或者O(n^2 lgn)。 但是针对这种曼哈顿距离的MST。 其中有个性质是:对于某个点,以他为中心的区域分为8个象限,对于每一个象限,只会 阅读详情

题目:求平面上n个点的曼哈顿最小生成树的第k大的边。

思路:模板题

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
// 0x3f3f3f3f

const int maxn=1e4+50;
const int maxm=2e3+50;
int tree[maxm],pos[maxm];
int lowbit(int i){
    return i&(-i);
}
void add(int i,int val,int id){
    while(i<maxm){
        if(tree[i]>val){
            tree[i]=val;
            pos[i]=id;
        }
        i+=lowbit(i);
    }
}
int query(int i){
    int id=-1,val=INF;
    while(i>0){
        if(tree[i]<val){
            val=tree[i];
            id=pos[i];
        }
        i-=lowbit(i);
    }
    return id;
}
struct Node{
    int id,x,y,xsy;
}point[maxn],p[maxn];
bool cmpx(Node a,Node b){
    if(a.x==b.x) return a.y>b.y;
    return a.x>b.x;
}
bool cmpxsy(Node a,Node b){
    return a.xsy<b.xsy;
}
struct Edge{
    int u,v,w;
    Edge(int _u=0,int _v=0,int _w=0):u(_u),v(_v),w(_w){}
    bool operator<(const Edge& rhs)const{
        return w<rhs.w;
    }
};
vector<Edge> edge;
int dist(Node a,Node b){
    return f_abs(a.x-b.x)+f_abs(a.y-b.y);
}
void Manhaton(int n){
    for(int i=0;i<n;i++)
        point[i].xsy=point[i].x-point[i].y;
    sort(point,point+n,cmpxsy);
    int now=0,pre=-INF;
    for(int i=0;i<n;i++){
        if(pre!=point[i].xsy){
            now++;
            pre=point[i].xsy;
        }
        point[i].xsy=now;
    }
    sort(point,point+n,cmpx);
    for(int i=1;i<maxm;i++)
        tree[i]=INF,pos[i]=-1;
    for(int i=0;i<n;i++){
        int u=point[i].id;
        int v=query(point[i].xsy);
        if(v!=-1) edge.push_back(Edge(u,v,dist(p[u],p[v])));
        add(point[i].xsy,point[i].x+point[i].y,u);
    }
}
void buildEdge(int n){
    edge.clear();
    for(int i=0;i<4;i++){
        for(int j=0;j<n;j++) point[j]=p[j];
        for(int j=0;j<n;j++){
            if(i==1) swap(point[j].x,point[j].y);
            else if(i==2) point[j].y=-point[j].y;
            else if(i==3){
                swap(point[j].x,point[j].y);
                point[j].y=-point[j].y;
            }
        }
        Manhaton(n);
    }
}
int fa[maxn];
int findset(int x){
    if(x==fa[x]) return x;
    return fa[x]=findset(fa[x]);
}
int MST(int n,int k){
    if(n<=k) return 0;
    for(int i=0;i<n;i++) fa[i]=i;
    sort(edge.begin(),edge.end());
    int sz=edge.size();
    for(int i=0;i<sz;i++){
        int u=findset(edge[i].u);
        int v=findset(edge[i].v);
        if(u==v) continue;
        fa[u]=v;
        n--;
        if(n==k) return edge[i].w;
    }
    return 0;
}
int main(){

    int n,k;
    while(~scanf("%d%d",&n,&k)){
        for(int i=0;i<n;i++){
            scanf("%d%d",&p[i].x,&p[i].y);
            p[i].id=i;
        }
        buildEdge(n);
        printf("%d\n",MST(n,k));
    }
    return 0;
}


平面点曼哈顿最小生成树——POJ 3241 Object Clustering 阅读详情

相关推荐

Unity采样器过多导致URP默认的Lit.Shader报错(shader error in ‘universal render pipeline/lit’: maximum ps_4_0 samp)

Shader中多个Sample Texture2D,Sample Texture3D或者类似节点的使用,该类节点都需要一个采样器,如果Shader使用超过了16个纹理采样器,如多个Base Color,Normal Map等,就容易超出。是因为每种Shader Model和GPU都有一个对纹理采样器数量的限制,是因为每个采样器都需要在显卡占用一个独立的寄存器,而寄存器的数量是有限的,当超过限制,显卡无法分配更多的寄存器给新的采样器,因此会导致编译错误。2.什么原因导致纹理采样器超出16个?

qq_41884036的博客 4233

【poj3241】 Object Clustering

http://poj.org/problem?id=3241 (题目链接)MD被坑了,看到博客里面说莫队要写曼哈顿最小生成树,我就写了一个下午。。结果根本没什么关系。不过还是把博客写了吧。转自:http://blog.youkuaiyun.com/huzecong/article/details/8576908题意:求曼哈顿距离最小生成树上第k大(第n-k小)的边solution   曼哈顿距离最小生成树问题

MashiroSky的博客 1133

基于拟蒙特卡洛模拟法的随机潮流计算matlab程序

由式(4-11)可知,蒙特卡洛模拟法的计算量不受电力系统规模大小影响,因此该方法在一些复杂的电力系统中可以得到应用,包括处理电力系统中有多个间歇性新能源接入的问题,解决系统中多个节点之间相关性问题等等。本章在此基础上提出了基于拟蒙特卡洛模拟的随机潮流计算方法,并且对拟蒙特卡洛法中的拟随机数序列进行了改进,大大提高了随机潮流的计算效率。模拟法的具体思路如下:基于实际工程问题的求解需要,建立与之相对应的随机模拟过程和随机概率模型,使得它们的参数,包括概率分布或者数学期望,能够等于问题的实际解;

weixin_47365903的博客 1792

POJ3241 Object Clustering(最小生成树)题解

题意:求最小生成树第K大的边权值 思路: 如果暴力加边再用Kruskal,边太多会超时。这里用一个算法来减少有效边的加入。 边权值为点间曼哈顿距离,那么每个点的有效加边选择应该是和他最近的4个象限方向的点。这里用一个树状数组维护以y-x为索引的y+x的值,然后这个数组所储存的就是一个点的第一象限方向的距离他最近的点。这样我们每次查找只要看(i,N)这个区间是否有一个点的距离比现在的更小(因为...

weixin_34194087的博客 221

无人机芯片模块技术要点分析

恶劣环境下信号稳定性:无人机在恶劣环境下工作时,遥感系统采集的信号往往很不稳定,视频信号处理芯片需要具备强抗干扰能力,能辨别脉冲脉宽为50ns以上、幅度为0V~4.5V的输入信号。这种架构能兼顾强大的运算能力和灵活的接口控制。芯片小型化:麻省理工学院的研究人员已设计出仅20平方毫米的微型芯片,可处理无人机飞行所需的惯性数据和相机图像,为微型无人机的发展奠定了基础。光子集成芯片(PIC) :研究显示,与电子芯片相比,光子计算芯片在延迟、计算容量和能效上都有数量级的提升,有望解决当前无人机系统的计算瓶颈。

YUNZHUO666的博客 1404

SV--对象拷贝、参数化的类

对象拷贝,参数化的类

创芯人--fly的博客 1569

POJ 3241 Object Clustering 二维平面曼哈顿距离最小生成树

题目链接:点击打开链接 题意: 给定二维平面上的n个点坐标,常数k 下面n行给出坐标 求一个最小生成树,问第k大的边是多少。 任意两个点间建一条边的花费是其曼哈顿距离。 思路:转自:点击打开链接 一、曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下: 给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价。 朴素的算法

九野的博客 2937

微信DAT图片恢复全攻略:从文件路径到批量解密(附最新工具下载)

本文详细介绍了微信DAT图片恢复的全过程,从文件路径定位到批量解密操作,帮助用户高效恢复加密存储的图片。文章涵盖新旧版本微信的存储结构差异,推荐使用专业解密工具进行批量转换,并提供了提升恢复成功率的实用技巧和常见问题解决方案。

weixin_29325007的博客 455

Object Clustering POJ - 3241 曼哈顿最小生成树

题目链接:https://cn.vjudge.net/problem/POJ-3241 题意:n个点,按照曼哈顿距离,形成k个集合后,使得每个集合任意两点的距离小于等于x,求最小的x 题解:也就是最小生成树中,第n-k小的边。曼哈顿最小生成树思路讲解:点击查看 #include<iostream> #include<cstdio> #include<algo...

还我笑颜 252

【汽车ECU标定技术解析】DCM文件与A2L、HEX的协同工作机制

本文深入解析了汽车ECU标定中DCM、A2L与HEX三大核心文件的协同工作机制。A2L文件作为定义标定变量地址与规则的“图纸”,DCM文件承载工程师调试后的具体标定数据,最终通过A2L的地址映射,将DCM数据固化生成可刷入ECU的HEX文件,形成完整的标定数据流转闭环。

weixin_29214559的博客 436

ArtMate —— 美术公开课智能体开发全记录

本文档详细描述了一款专为中小学美术公开课设计的智能教学助手的开发过程。该智能体融合了多模态感知、自然语言交互、风格迁移与智能评价等技术,旨在辅助教师开展生动、高效的美术鉴赏与创作课程。全文包含需求分析、系统架构设计、核心模块代码实现、交互界面搭建及完整运行示例,并配有详尽的行内注释和设计思想阐述,为教育技术开发者提供一份可落地、可扩展的参考方案。

huanghm88的专栏 151

【POJ 3241】曼哈顿最小生成树(模板整理)

关于 曼哈顿最小生成树 的证明见:http://www.2cto.com/kf/201505/399861.html 模板: #include #include #include #include using namespace std; const int MAXN = 100010; const int INF = 0x3f3f3f3f; struct Point{ int x,

花月阁 1513

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5717

POJ3241 曼哈顿距离最小生成树

=.= 为什么莫队专题里面会有原理的题。。莫队是基于曼哈顿距离最小生成树提出的一种分块暴力(个人理解)算法,以后再说,先说这题。 因为不是图论选手,我图论非常菜,这题也是见都没见过,所以看了很多题解,来总结一下。 虽然说看了很多题解,但你搜搜就会发现,全部的讲解都是 一 模 一 样 的 !一点变动都没有的那种,所以我就直接写轮眼过来了。 http://poj.org/problem?id=3...

szudianchuang的博客 324

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ - 3241 Object Clustering (曼哈顿最小生成树)

题意: 平面上有n个点集,现在把他们分成k个集合,使得每个集合中的每个点都至少有一个本集合的点之间的曼哈顿距离不大于X,求最小的X。 分析: 题目要求划分集合之后,每个集合的曼哈顿最小生成树的最长边不超过X,那么容易想到就是整个点集的曼哈顿最小生成树的第n-k条边。 求解曼哈顿距离最小生成树的方法简述:   如果直接两两点建边,总边数则为O(n^2)条,用时间复杂度O(N+E)的Prim...

兜率工的博客 457

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj3241(曼哈顿最小生成树)

题目链接:http://poj.org/problem?id=3241 题意:求曼哈顿距离最小生成树第k大的边。曼哈顿距离:点A(x1,y1)与点B(x2,y2)距离d=abs(x1-x2)+abs(y1-y2)。 求解曼哈顿距离最小生成树的方法简述:   如果直接两两点建边,总边数则为O(n2)条,用时间复杂度O(N+E)的Prim算法,时间复杂度O(E*logE)的kruska...

agyohust791263的博客 236

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ - 3241 曼哈顿最小生成树

题意:平面上有n个点,将这n个点分成k部分,找到最小的X,使得每部分中任意两点距离都&lt;=X。转化一下就是求曼哈顿生成树的第k+1长的边,即第n-k短的边。用上一题的代码(UVALive-3662)改一下就好了。#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;cstring&gt...

XFire的博客 360

关于曼哈顿距离的最小生成树 POJ3241

题目地址 题目就是给你n个点 求n个点的曼哈顿距离的最小生成树 输出所有边中第k大的的边的权重。 n个点那么有有n∗(n−1)n*(n-1)条边如果采用朴素的prim算法建边就是O(n2)O(n^2)的复杂度,我们来考虑一下曼哈顿距离的特殊性,其实不是所有的边都需要,在建边的时候就可以去掉很多多余的边。 如图,对于给定的一些点我们选取一个点那么可以以这个点为原点建立一个直角坐标系,然后把每一个

touwangyi的博客 1199

【POJ 3241】Object Clustering 曼哈顿距离最小生成树

http://poj.org/problem?id=3241 曼哈顿距离最小生成树模板题。 核心思想是把坐标系转3次,以及以横坐标为第一关键字,纵坐标为第二关键字排序后,从后往前扫。扫完一个点就把它插到树状数组的y-x位置上,权值为x+y。查询时查询扫过的所有点满足ydone-xdone>=ynow-xnow时,直接是树状数组中的的一个后缀区间,从后往前扫保证了区间内的这些点都...

as2886089的博客 152

POJ 3241 Object Clustering 曼哈顿距离最小生成树

题目大意:求出曼哈顿距离最小生成树上的第k大边权。 思路:首先,你要了解:http://blog.youkuaiyun.com/acm_cxlove/article/details/8890003 也就是说,我们以每一个点为中心,把平面分成8个部分,每一个部分我们只需要离这个点最近的点。然后加上建一条边连接这个边和最近的点。然后就是MST。 听说这个算法是莫队算法的基础,我现在就去学。

(╯°口°)╯(┴—┴ 894

POJ 3241 曼哈顿最小生成树

//题意: 询问平面上的点的曼哈顿距离最小生成树第n-k小边的长度,点数为10000。 //最小生成树边权对应??? //1A2s险过 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define maxn 10100 #define m

hiding_nya的博客 331

poj 3241 Object Clustering 曼哈顿最小生成树

题意:        平面上有n个点,现在把他们分成k个集合,使得每个集合中的每个点都至少有一个本集合的点之间的曼哈顿距离不大于X,求最小的X。 分析:        转化为求n个点生成完全图的最小生成树的第k大边。接下来有几个重点。 1)根据莫队算法,由于边权是点的曼哈顿距离,每个点只需要跟周围8个方向中每个方向最近的点连边,这样算出的图与用完全图算出的最小生成树一样,涉及的边却大大

sepNINE的专栏 1586

POJ 3241 Object Clustering (曼哈顿距离最小生成树)

题意: 询问平面上的点的曼哈顿距离最小生成树第n-k小边的长度,点数为10000。 解法:对于曼哈顿距离最小生成树,朴素的解法需要建n^2条边进行kruskal,显然要TLE。2010莫涛论文中提到了一个可以将边优化到8*n条的方法,其实就是利用了一个性质:以任意一个点为端点将平面分成均匀45度角的8个块,那么在生成树的最优解中,每个块与这个点至多有1条边,即一个点最多向8个方向最近的点各连接一

= = 1121

POJ 3241Object Clustering曼哈顿距离最小生成树

Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into several groups by judgement of their resemblance. To simply the model, each object has 2 indexes a and b (a,...

日拱一卒,功不唐捐 2828
上一篇: hdu5213 Lucky 莫队算法+容斥
下一篇: hdu6134 Battlestation Operational 莫比乌斯反演
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值