zoukankan      html  css  js  c++  java
  • 洛谷 2449 [SDOI2005]矩形

    【题解】

      因为这道题中n比较小,n^2效率是可以接受的。

      枚举两个矩形,如果它们有重叠部分,就用并查集合并一下即可。

      

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define N 8000
     4 #define rg register
     5 using namespace std;
     6 int n,fa[N],ans;
     7 struct rec{
     8     int x,y,xx,yy;
     9 }a[N];
    10 inline int read(){
    11     int k=0,f=1; char c=getchar();
    12     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    13     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    14     return k*f;
    15 }
    16 inline int find(int x){
    17     return fa[x]==x?x:fa[x]=find(fa[x]);
    18 }
    19 inline bool in(int s1,int s2){
    20     if(a[s1].x>a[s2].x||(a[s1].x==a[s2].x&&a[s1].y>a[s2].y)) swap(s1,s2);
    21     if(a[s1].xx>a[s2].x&&a[s1].yy>a[s2].y) return 1;
    22     return 0;
    23 }
    24 int main(){
    25     n=read();
    26     for(rg int i=1;i<=n;i++) 
    27         a[i].x=read(),a[i].y=read(),a[i].xx=read(),a[i].yy=read();
    28     for(rg int i=1;i<=n;i++) fa[i]=i;
    29     for(rg int i=1;i<n;i++)
    30         for(rg int j=i+1;j<=n;j++)
    31         if(in(i,j)) fa[find(i)]=find(j);
    32     for(rg int i=1;i<=n;i++) if(fa[i]==i) ans++;
    33     printf("%d
    ",ans);
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    Binary Search Tree
    uC/OS-II 内存管理
    RLP
    hbase (local mode) remote access
    arm swi 软中断 一例
    模拟uClinux系统调用
    docker with flannel
    tcp并发服务器(c20w)
    浏览器的同源策略及跨域解决方案
    Redis快速入门
  • 原文地址:https://www.cnblogs.com/DriverLao/p/8692723.html
Copyright © 2011-2022 走看看