BZOJ 2177: 曼哈顿最小生成树 曼哈顿最小生成树

2177: 曼哈顿最小生成树

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 281  Solved: 117
[Submit][Status][Discuss]

Description

平面坐标系xOy内,给定n个顶点V = (x , y)。对于顶点u、v,u与v之间的距离d定义为|xu – xv| + |yu – yv| 
你的任务就是求出这n个顶点的最小生成树。 

Input

第一行一个正整数n,表示定点个数。 
接下来n行每行两个正整数x、y,描述一个顶点。 

Output

只有一行,为最小生成树的边的距离和。 

Sample Input

4
1 0
0 1
0 -1
-1 0

Sample Output

6

HINT

对于100%的数据n <= 50000;

0 <= x, y <= 100000。

BZOJ 2177: 曼哈顿最小生成树 曼哈顿最小生成树_第1张图片BZOJ 2177: 曼哈顿最小生成树 曼哈顿最小生成树_第2张图片

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

typedef long long ll;

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
void print(int x)
{if(x<0)putchar('-'),x=-x;if(x>=10)print(x/10);putchar(x%10+'0');}

const int N=50100,inf=0X3f3f3f3f;

int ecnt;
struct EDGE
{
	int u,v,val;
	friend bool operator <(const EDGE &x,const EDGE &y)
	{return x.val>1;
		V[mid]<=x ? l=mid+1 : r=mid-1 ;
	}
	return l-1;
}

inline void modify(int x,int val,int pos)
{
	for(;x;x-=(x&-x))
		if(val


你可能感兴趣的:(—————————计算几何,最小生成树,—————————树)