洛穀 P2449 [SDOI2005]矩形_pascal

來源:互聯網
上載者:User

題目描述

現在我們在一個平面上畫了n個矩形。每一個矩形的兩邊都與座標軸相平行,且矩形定點的座標均為整數。現我們定義滿足如下性質的圖形為一個塊:

1.每一個矩形都是一個塊;

2.如果兩個塊有一段公用的部分,那麼這兩個塊就會形成一個新的塊,否則這兩個塊就是不同的。

樣本:

圖1中的矩形形成了兩個不同的塊。圖2中的矩形形成了一個塊。

任務:

請寫一個程式:

1.從文字檔PRO.IN中讀入各個矩形的頂點座標;

2.找出這些矩形中不同的塊的數目;

3.把結果輸出到文字檔PRO.OUT中。

輸入輸出格式

輸入格式:
文字檔PRO.IN的第一行包括一個整數n,1 n 7000,為矩形的數目。以下的n行為矩形頂點的座標。每一個矩形都是用四個整數來描述的:左下角的x座標、左下角的y座標、右上方的x座標和右上方的y座標。所有的座標都是不大於10000的非負整數。

輸出格式:
在文字檔PRO.OUT中輸出唯一的一個整數——這些矩形所形成的不同的塊的數目。

輸入輸出範例

輸入範例#1:
9
0 3 2 6
4 5 5 7
4 2 6 4
2 0 3 2
5 3 6 4
3 2 5 3
1 4 4 7
0 0 1 4
0 0 4 1
輸出範例#1:
2
並查集:
1.判斷兩兩矩形是否有重合部分。
2.有就做並查集,合并成一個集合。
3.for一次判斷有多少個集合。
時間複雜度:O(n^2)

var   f,x,y,p,q:array [0..7001] of longint;   i,j,n,ans,k,l:longint;function find(c:longint):longint;begin     if f[c]=c then exit(c);     f[c]:=find(f[c]);     exit(f[c]);end;begin    readln(n);    for i:=1 to n do f[i]:=i;    for i:=1 to n do        begin            readln(x[i],y[i],p[i],q[i]);            for j:=1 to i-1 do                if (p[i]>=x[j]) and (p[j]>=x[i]) and                   ((q[i]>=y[j]) and (q[j]>=y[i])) and                   (((p[i]<>x[j]) and (p[j]<>x[i])) or ((q[i]<>y[j]) and (q[j]<>y[i])))                      then if find(i)<>find(j)                              then f[find(i)]:=find(j);        end;    for i:=1 to n do        if f[i]=i then inc(ans);    writeln(ans);end.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.