hdu 1198 並查集應用

2021-05-27 02:24:23 字數 764 閱讀 5640

其實可能是因為知道是用並查集做的原因啦,一下就看出題意了,明顯是並查集思想,每次輸入地圖中的一塊,檢測這一塊與它頂頭的那塊可不可以相通

如果可以合併集合;同理檢測其與它左邊的那一塊;最後遍歷一遍看有多少個根結點即要多少個水源

下面是**,有點亂

#include#include#define m 55

#define n 55

using namespace std;

class elem;

class cor;

cor father[m][n];

int n,m;

void init(vector& farm)

int change(char x)

cor find_father(int x,int y)

else

return father[x][y];

}void merge(cor a,cor b)

void process(int x,int y,elem map[m][n])

_x = x; _y = y-1;

if(_x >= 1 && _x <= n && _y >= 1 && _y <= m && map[x][y].left && map[_x][_y].right)

}int main()

} for(int i = 1;i <= n;i++)

} int count = 0;

for(int i = 1;i <= n;i++)

} cout <

hdu 1198 並查集應用

1 如何把a k塊表示出來,從而使之容易判斷兩塊地是否可以歸併到一起 例如 把a塊劃分如上圖所示,有4個方向,與其他塊有通路的方向標記為1,反之為0,所以a 其他同理 2 如何在map中識別是那一塊,然後根據這一塊找到它的四個方向的0 1情況呢?這裡把a k等效成了0 11 通過座標找到map所在位...

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...