并查集练习---poj 1984

usaco的月赛题。

记录两个点之间x方向和y方向的相对距离,用并查集维护。

若与poj 1182食物链进行比较,便会发现路径压缩部分,集合合并部分的相似点。

所以并查集不难,是有一定套路可循的。大家一定要好好总结。

【代码】

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

const int N=40005,K=10005;

struct node
{
    int x,y,idx,n;
}a[K];

int x[N],y[N],dx[N],dy[N],rx[N],ry[N],ans[K],fa[N];
int n,m,k;

int find(int x)
{
    if (fa[x]==x) return x;
    int t=fa[x];
    fa[x]=find(fa[x]);
    rx[x]+=rx[t];
    ry[x]+=ry[t];
    return fa[x];
}

int cmp(node a,node b)
{
    return a.idx



你可能感兴趣的:(acm_数据结构)