POJ 3241 曼哈顿最小生成树

//题意: 询问平面上的点的曼哈顿距离最小生成树第n-k小边的长度,点数为10000。
//最小生成树边权对应???
//1A2s险过
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define maxn 10100
#define maxm 100000
using namespace std;
int n,k;
int cnt;

struct point
{
    int x,y;
}G[maxn];


int pre[maxn],rank[maxn];

struct Edge
{
    int l,r;
    int w;
};

Edge edge[maxm];

void build(int target)
{
    int dis;
    int tempx=G[target].x;
    int tempy=G[target].y;
    int indexup=0;int indexdown=0;
    int miup=inf;
    int midown=inf;
    for(int i=1;i<=n;i++)
    {
        if(i==target) continue;
        dis=abs(G[i].x-tempx)+abs(G[i].y-tempy);
        if(G[i].x>=tempx && G[i].y>tempy)
        {
            if(distempx && G[i].y<=tempy )
        {
            if(dis= rank[y])
    {
        pre[y] =x;
        rank[x] += rank[y];
    }
    else
    {
        pre[x] = y;
        rank[y] += rank[x];
    }
}

bool cmp(Edge a,Edge b)
{
    return a.w < b.w;
}

void Kruskal()
{
    Init();
    int ans = 0;
    sort(edge,edge+cnt,cmp);
    int edgenum=0;
    for(int i=0;i

你可能感兴趣的:(图论--生成树)