大致题意:统计平面上由曼哈顿距离小于等于c的点对组成联通块的个数。

  曼哈顿生成树的模板题。有关讲解:http://blog.csdn.net/acm_cxlove/article/details/8890003

  

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXN 100100
#define MAXE MAXN*8
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
typedef long long qword;
int n,m;
struct edge
{
int x,y;
qword d;
}e[MAXE];
int tope=-;
bool cmp_d(edge e1,edge e2)
{
return e1.d<e2.d;
}
int uf[MAXN];
int get_fa(int now)
{
return uf[now]==now ? now : uf[now]=get_fa(uf[now]);
}
int comb(int x,int y)
{
x=get_fa(x);
y=get_fa(y);
if (x==y)return false;
uf[x]=y;
return true;
}
struct point
{
qword x,y;
int id;
}pl[MAXN];
bool cmp_x(point p1,point p2)
{
if (p1.x==p2.x)return p1.y>p2.y;
return p1.x>p2.x;
}
void rotate1()
{
for (int i=;i<n;i++)
pl[i].x=-pl[i].x;
}
void rotate2()
{
for (int i=;i<n;i++)
pl[i].y=-pl[i].y;
}
void rotate3()
{
for (int i=;i<n;i++)
swap(pl[i].x,pl[i].y);
}
qword h[MAXN],toph=-;
qword tarr[MAXN];
int tarr_id[MAXN];
void Add_tarr(int pos,qword v,int id)
{
while (pos<MAXN)
{
tarr[pos]=min(tarr[pos],v);
if (v==tarr[pos])tarr_id[pos]=id;
pos+=pos&(-pos);
}
}
pair<qword,int> Qry_tarr(int pos)
{
pair<qword,int> ret;
ret.first=INFL;
while (pos)
{
ret.first=min(ret.first,tarr[pos]);
if (ret.first==tarr[pos])
ret.second=tarr_id[pos];
pos-=pos&(-pos);
}
return ret;
}
void work()
{
int i,j;
toph=;
memset(tarr,0x3f,sizeof(tarr));
for (i=;i<n;i++)
h[++toph]=pl[i].x-pl[i].y;
sort(h+,h+toph+);
toph=unique(h+,h+toph+)-h-;
sort(pl,pl+n,cmp_x);
for (i=;i<n;i++)
{
pair<qword,int> pr;
qword t=pl[i].x-pl[i].y;
t=lower_bound(h+,h+toph+,t)-h;
pr=Qry_tarr(t);
if (pr.first!=INFL)
{
e[++tope].x=pl[i].id;
e[tope].y=pr.second;
e[tope].d=pr.first-pl[i].x-pl[i].y;
}
Add_tarr(t,pl[i].x+pl[i].y,pl[i].id);
}
}
int is_root[MAXN],uf_size[MAXN];
int main()
{
freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int i,j,k,x,y,z;
scanf("%d%d",&n,&m);
for (i=;i<n;i++)
{
scanf("%lld%lld",&pl[i].x,&pl[i].y);
pl[i].id=i;
}
//
work();
//
rotate3();
work();
rotate3();
//
rotate2();
rotate3();
work();
rotate3();
rotate2();
//
rotate2();
work();
rotate2();
//
rotate2();
rotate1();
work();
rotate1();
rotate2();
//
rotate1();
rotate2();
rotate3();
work();
rotate3();
rotate2();
rotate1();
//
rotate1();
rotate3();
work();
rotate3();
rotate1();
//
rotate1();
work();
rotate1();
sort(e,e+tope+,cmp_d);
for (i=;i<=n;i++)uf[i]=i;
for (i=;i<=tope && e[i].d<=m;i++)
{
comb(e[i].x,e[i].y);
}
int ans2=;
for (i=;i<n;i++)
{
is_root[get_fa(i)]=;
uf_size[uf[i]]++;
}
for (i=;i<n;i++)
is_root[i]+=is_root[i-];
for (i=;i<n;i++)
ans2=max(ans2,uf_size[i]);
printf("%d %d\n",is_root[n-],ans2);
return ;
}

bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 曼哈顿生成树的更多相关文章

  1. BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    题目 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec  Memory Limit: 64 MB Description ...

  2. bzoj 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集)

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的 时候有一个独一无二的位置坐标Xi,Yi( ...

  3. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居——排序+贪心+set

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l ...

  4. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  5. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居【切比雪夫距离+并查集+multiset】

    参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x-y),距离就变成了max(x',y'): 先按x排序,维护两个指针, ...

  6. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Treap

    题意:链接 方法: Treap 解析: 前几道资格赛的题水的不行,这道Gold的题就够分量辣. 首先这个曼哈顿距离啥的肯定能做文章,怎么转化是个问题,自己玩了一会没玩出来,就查了查曼哈顿距离的转化,发 ...

  7. 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1604 这题太神了... 简直就是 神思想+神做法+神stl.. 被stl整的我想cry...首先,, ...

  8. 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    [算法]并查集+平衡树+数学+扫描线 [题解] 经典曼哈顿距离转切比雪夫距离. 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2, ...

  9. [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 试题描述 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发 ...

随机推荐

  1. 关于IB_DESIGNABLE / IBInspectable的那些事

    前言 IB_DESIGNABLE / IBInspectable 这两个关键字是在WWDC 2014年”What’s New in Interface Builder”这个Session里面,用Swi ...

  2. sudo 免密码

    转自:sudo 免密码 很多都是修改/etc/sudoers权限为740再加上一句 ALL=NOPASSWD:ALL 或者加一句 yourname ALL=(ALL) NOPASSWD: ALL 然后 ...

  3. jAVA HDU1001题

    import java.util.Scanner;public class Main { public static void main(String args[]) { Scanner cin=ne ...

  4. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)

    Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST.它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架 ...

  5. html笔记05:html、css、javascript综合案例

    1.首先是html代码: <!-- markup time --> <div class="wrapper wb"> <div class=" ...

  6. 职场PPT达人装酷的13条秘诀

    对<说服力-让你的PPT会说话>读者调查显示,88.8%的白领认为“做出漂亮的幻灯片对晋升有帮助”,99.9%的白领一致认为职场装酷神器排行榜第一位是PPT,甚至有位程序员说哥最牛的编程环 ...

  7. config文件中可以配置查询超时时间

    web.config配置数据库连接 第一种:获取连接字符串 首先要定义命名空间 system.configuration 1.  string connstr= string constr = Con ...

  8. 4柱汉诺塔(zz)

    多柱汉诺塔可以用Frame–Stewart算法来解决. The Frame–Stewart algorithm, giving a presumably optimal solution for fo ...

  9. jBPM5 vs Actitivi

    http://www.blogways.net/blog/2013/07/16/activiti-jbpm-compare.html jBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baey ...

  10. Orchard helloworld

    原文链接:http://www.orchardproject.net/docs/Building-a-hello-world-module.ashx 命令行语法:http://www.cnblogs. ...