bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 曼哈顿生成树
大致题意:统计平面上由曼哈顿距离小于等于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 奶牛的邻居 曼哈顿生成树的更多相关文章
- BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
题目 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec Memory Limit: 64 MB Description ...
- bzoj 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集)
Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的 时候有一个独一无二的位置坐标Xi,Yi( ...
- bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居——排序+贪心+set
Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l ...
- BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...
- bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居【切比雪夫距离+并查集+multiset】
参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x-y),距离就变成了max(x',y'): 先按x排序,维护两个指针, ...
- BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Treap
题意:链接 方法: Treap 解析: 前几道资格赛的题水的不行,这道Gold的题就够分量辣. 首先这个曼哈顿距离啥的肯定能做文章,怎么转化是个问题,自己玩了一会没玩出来,就查了查曼哈顿距离的转化,发 ...
- 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1604 这题太神了... 简直就是 神思想+神做法+神stl.. 被stl整的我想cry...首先,, ...
- 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
[算法]并查集+平衡树+数学+扫描线 [题解] 经典曼哈顿距离转切比雪夫距离. 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2, ...
- [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
[BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 试题描述 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发 ...
随机推荐
- [转] Spring - Java Based Configuration
PS: Spring boot注解,Configuration是生成一个config对象,@Bean指定对应的函数返回的是Bean对象,相当于XML定义,ConfigurationProperties ...
- C# 反射的简单用法
新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...
- MySQL(5.6) 函数
字符串函数 ASCII(str) 说明:返回字符串 str 最左边字符的 ASCII 值 mysql'); mysql); mysql> SELECT ASCII('a'); mysql> ...
- Java 链式编程
这里来做一个Java 链式编程的例子,基本就是每次返回一个对象本身,这样就能够去调用对象的方法和属性. package com.sun; public class Demo05 { /** * @pa ...
- JVM内存模型以及垃圾收集策略解析
http://xmuzyq.iteye.com/blog/599750 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程. ...
- C# HTTP 请求
public class HttpHelper { /// <summary> /// 创建GET方式的HTTP请求 /// </summary> public static ...
- group by java实现
public static void abc(List list,String... sortName) throws Exception{ Map<String,List<Object& ...
- 推荐几本C#程序员阅读的书籍
http://www.cnblogs.com/tongming/p/3879752.html
- ASP.NET MVC5总结(二)@HTML扩展
1.@Html.AntiForgeryToken() 用来防止跨站请求伪造(CSRF)攻击的一个措施 2.@Html.ValidationSummary(true) 主要用来 (1). 显示后台 Mo ...
- ImageIcon图像处理相关测试【一些特殊的处理方式】
/*************以下源码通过测试******************************/ package cn.jason.ios.images; import java.awt.F ...