并查集
2025-08-17 10:35:22
发布于:浙江
2阅读
0回复
0点赞
老师讲的
就是判断矩形是否联通,用并查集合并
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct juxing{
int ax,ay,bx,by;
}a[7891];
int n,ans;
int f[7891];
int find(int x){
return f[x]==x ? x:f[x]=find(f[x]);
}
bool check(juxing a,juxing b){
if((a.bx<b.ax||b.bx<a.ax)||(a.by<b.ay||b.by<a.ay)) return false;
if((a.ax==b.bx||a.bx==b.ax)&&(a.ay==b.by||a.by==b.ay)) return false;
return true;
}
int main(){
//freopen("pro.in","r",stdin);
//freopen("pro.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=n;i++){
cin>>a[i].ax>>a[i].ay>>a[i].bx>>a[i].by;
for(int j=1;j<i;j++){
if(check(a[i],a[j])&&find(i)!=find(j)){
f[find(i)]=find(j);
}
}
}
for(int i=1;i<=n;i++)
ans+=f[i]==i;
cout<<ans;
//fclose(stdin);
//fclose(stdout);
}
全部评论 1
你是在集中营吗?
5天前 来自 北京
0YES
4天前 来自 浙江
0
有帮助,赞一个