1487 島嶼3 並查集)

2021-09-17 21:36:57 字數 1145 閱讀 9249

description

h國正在進行一項持續n周的填海造島工程。整片工程海域可以被看作是1000x1000的網格。

每週都有一塊1x1的單位方格海域被填成陸地。如果我們將連成一片的陸地(一塊單位方格與它上下左右4個單位方格是相連的)視為島嶼,h國想監測每週末整片海域中一共存在有多少個島嶼,以及這些島嶼的總面積和總周長各是多少。

假設工程持續三周,第一周被填的海域座標是(0, 0),那麼第一周結束後有1座島嶼、總面積是1、總周長是4:#……

…第二週被填的海域座標是(1, 1),那麼第二週結束後有2座島嶼、總面積是2、總周長是8:

#….#.

…第三週被填的海域座標是(1, 0),那麼第三週結束後有1座島嶼、總面積是3、總周長是8:

#…##.

…你能完成這項任務麼?

input

第一行包含乙個整數n,表示工程持續的週數。(1 <= n <= 100000)

以下n行每行包含兩個整數x和y,表示當周被填的海域座標。(0 <= x, y < 1000)

output

輸出n行,每行包含3個整數,依次是當週末島嶼的數量、總面積和總周長。

sample input

30 0

1 11 0

sample output

1 1 4

2 2 8

1 3 8

每填乙個網格(x,y),sum++,area++,l+=4。

然後對其四個方向的網格進行查詢是否已被填。

四個方向的網格每被填乙個,則l-=2。

再對四個方向中被填的網格進行查詢是否與當前網格在乙個並查集中,不在則sum–。

#include using namespace std;

const int maxn=1e6+7;

int n,par[maxn];

int dir[4][2]=;

bool vis[1100][1100];

inline int getid(int x,int y)

void init()

unit(getid(fx,fy),getid(x,y));

sum--;}}

}printf("%d %d %d\n",sum,area,l);}}

}

並查集 島嶼數量

解答參考 島嶼數量官方解答 問題描述 給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 grid 1 1 1 1 0 1 1 0 1 ...

Openjudge 島嶼(並查集)

題目鏈結 此題是並查集。考慮到水位不斷 所以將時間倒轉。先統計最後一天的聯通塊個數,每一天浮出水面的塊進行計算。複雜度o 玄學 如下 include include include using namespace std short u 5 short w 5 intn,m inline long ...

200 島嶼數量(並查集 DFS)

200.島嶼數量 方法一 dfs或bfs 遍搜尋遍改變,訪問陣列也不需要 class solution,int r int c public intnumislands char grid return res public void dfs int i,int j,char grid return...