UVALive - 3662 曼哈顿最小生成树

题意:平面上有n个点,求这些点的曼哈顿最小距离生成树。

裸的模板题。

#include
#include
#include
#include
#include

using namespace std;
typedef long long ll;
const int maxn=100050;
const int INF=0x3f3f3f3f;
struct point{
    int x,y,id;
}p[maxn];
bool cmp(point a,point b)
{
    if(a.x!=b.x) return a.x0)
    {
        if(val=0;i--)
        {
            int pos=lower_bound(b,b+m,a[i])-b+1;
            int ans=ask(pos,m);
            if(ans!=-1)
                addedge(p[i].id,p[ans].id,dist(p[i],p[ans]));
            update(pos,p[i].x+p[i].y,i);
        }
    }
}
ll solve()
{
    Manhattan_minimum_spanning_tree(n,p);
    memset(F,-1,sizeof F);
    sort(edge,edge+tot,cmpedge);
    ll ans=0;
    for(int i=0;i

你可能感兴趣的:(曼哈顿最小生成树)