栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3241 Object Clustering

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3241 Object Clustering

#include <functional>#include <algorithm>#include <iostream>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cstring>#include <cassert>#include <cstdio>#include <string>#include <vector>#include <bitset>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <list>#include <set>#include <map>using namespace std;#define pii pair<int,int>#define mem(a,b) memset(a,b,sizeof(a))#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define PI acos(-1.0)typedef __int64 LL;typedef unsigned __int64 ULL;const int N=10010;const int INF=0x3f3f3f3f;const int MOD=100000,STA=8000010;const LL LNF=1LL<<60;const double EPS=1e-8;const double OO=1e15;const int dx[4]={-1,0,1,0};const int dy[4]={0,1,0,-1};const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};struct Point{    int x,y,id;    bool operator<(const Point p)const{        return x!=p.x?x<p.x:y<p.y;    }}p[N];struct BIT{    int min_val,pos;    void init(){        min_val=INF;        pos=-1;    }}bit[N];struct Edge{    int u,v,d;    bool operator<(const Edge e)const{        return d<e.d;    }}e[N<<2];int T[N],hs[N];int n,mt,pre[N];void adde(int u,int v,int d){    e[mt].u=u,e[mt].v=v;    e[mt++].d=d;}int find(int x){    return pre[x]=(x==pre[x]?x:find(pre[x]));}int dist(int i,int j){    return abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y);}inline int lowbit(int x){    return x&(-x);}void update(int x,int val,int pos){    for(int i=x;i>=1;i-=lowbit(i))        if(val<bit[i].min_val) bit[i].min_val=val,bit[i].pos=pos;}int query(int x,int m){    int min_val=INF,pos=-1;    for(int i=x;i<=m;i+=lowbit(i))        if(bit[i].min_val<min_val) min_val=bit[i].min_val,pos=bit[i].pos;    return pos;}int Manhattan_minimum_spanning_tree(int n,Point *p,int K){    int i,w,dir,fa,fb,pos,m;    mt=0;    for(dir=0;dir<4;dir++){        if(dir==1||dir==3){ for(i=0;i<n;i++)     swap(p[i].x,p[i].y);        }        else if(dir==2){ for(i=0;i<n;i++){     p[i].x=-p[i].x; }        }        sort(p,p+n);        for(i=0;i<n;i++){ T[i]=hs[i]=p[i].y-p[i].x;        }        sort(hs,hs+n);        m=unique(hs,hs+n)-hs;        for(i=1;i<=m;i++) bit[i].init();        for(i=n-1;i>=0;i--){ pos=lower_bound(hs,hs+m,T[i])-hs+1;  w=query(pos,m); if(w!=-1)     adde(p[i].id,p[w].id,dist(i,w)); update(pos,p[i].x+p[i].y,i);        }    }    sort(e,e+mt);    for(i=0;i<n;i++)pre[i]=i;    for(i=0;i<mt;i++){        fa=find(e[i].u),fb=find(e[i].v);        if(fa!=fb){ K--;pre[fa]=fb; if(K==0)return e[i].d;        }    }}int main(){    int i,j,k;    while(~scanf("%d%d",&n,&k))    {        for(i=0;i<n;i++){ scanf("%d%d",&p[i].x,&p[i].y); p[i].id=i;        }        printf("%dn",Manhattan_minimum_spanning_tree(n,p,n-k));    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号