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