hdu 1198 並查集應用

2021-08-16 13:04:14 字數 798 閱讀 3942

(1)如何把a->k塊表示出來,從而使之容易判斷兩塊地是否可以歸併到一起

例如:

把a塊劃分如上圖所示,有4個方向,與其他塊有通路的方向標記為1,反之為0,所以a=,其他同理

(2)如何在map中識別是那一塊,然後根據這一塊找到它的四個方向的0/1情況呢?這裡把a->k等效成了0-11(通過座標找到map所在位置的字元,然後用此字元減去』a』),然後開闢乙個a[11][4]的陣列標記a->k每一塊的方向

(3)約定把map中的塊從左到右,從上到下,標記為第1塊,一直到n*m塊,通過座標(i,j),可以計算這是那一塊(公式i*n+j),從而在下面的並查集的函式(初始化函式,find函式,以及歸併函式)中容易操作

#include 

#include

#include

#include

using namespace std;

int f[3100];

char mp[55][55];

intm,n;

char pipe[11][5]=;

int find(int

x)void union(int

x,int

y)int main()

int cnt = 0;

for(int i=0;i

*n;i++)

printf("%d\n",cnt);

}return

0;}

hdu 1198 並查集應用

其實可能是因為知道是用並查集做的原因啦,一下就看出題意了,明顯是並查集思想,每次輸入地圖中的一塊,檢測這一塊與它頂頭的那塊可不可以相通 如果可以合併集合 同理檢測其與它左邊的那一塊 最後遍歷一遍看有多少個根結點即要多少個水源 下面是 有點亂 include include define m 55 d...

HDU3938 並查集 並查集

先按邊權值排個序,每次加入一條邊,用並查集,關鍵看懂題。include include include include using namespace std const int maxn 10010 int n,m,q struct edge edges maxn 5 inline int cmp...

HDU 1232 1213並查集應用 練習

並查集還是挺簡單的,路徑壓縮,按秩合併 這個很麻煩,建議了解就好,主要是路徑壓縮,我寫的 也只是普通的合併 前天學的,要練練手,以防生疏 include include define maxn 10010 define inf 999999999 using namespace std int ma...