并查集的简单应用(矩形合并)

题目链接:
http://www.acmicpc.sdnu.edu.cn/problem/show/1016

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int pre[100];

struct sss
{
    int lx,ly,rx,ry;
}l[105];

int find (int x)
{
    if(pre[x]==x)return x;
    else return pre[x]=find(pre[x]);
}

void merge(int x,int y)
{
    int xx=find(x);
    int yy=find(y);
    if(xx!=yy) pre[xx]=yy;
}

int panduan (sss x,sss y)
{
    if(x.rx<=y.lx||x.ry<=y.ly||x.lx>=y.rx||x.ly>=y.ry)return 0;
    else return 1;
}

int main ()
{
    int n;
    cin >> n;
    for (int i=1;i<=n;i++)
    {
        pre[i]=i;
        cin >> l[i].lx >> l[i].ly >> l[i].rx >> l[i].ry;
    }

    for(int i=1;i<=n;i++)
    {
        for (int j=i+1;j<=n;j++)
        {
            if(panduan(l[i],l[j])==1) merge(i,j);
        }
    }
    int ans=0;
    for (int i=1;i<=n;i++)
    {
        if(pre[i]==i) ans++;
    }
    cout << ans << endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
03-30 21:35
爱蜜莉雅碳劝退测开:裁员裁大动脉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务