zoj 3761(並查集 搜尋)

2021-09-06 14:08:48 字數 1041 閱讀 9023

題意:在乙個平面上,有若干個球,給出球的座標,每次可以將乙個球朝另乙個球打過去(只有上下左右),碰到下乙個球之後原先的球停下來,然後被撞的球朝這個方向移動,直到有乙個球再也撞不到下乙個球后,這個球飛出,球只能是朝上下左右四個方向打,並且要乙個球四個方向都沒有球了,這個球就不能打了。問說最少平面上剩幾個球,並且給出打球的方案。

思路:把四個方向可以連成一塊的球用乙個並查集連起來,有多少個並查集,最後就會剩下多少個球,然後就是從並查集的葉子節點往根結點輸出路徑。這裡要注意,不能重複輸出,還有就是,在擊打球的時候,有乙個先後順序,我們輸出的時候,必須嚴格按照這個順序,就是說,每次必須先把父節點所有的枝路徑全部輸出後,才能輸出這個父節點及其父節點的路徑........

#include#include#include#includeusing namespace std;

int father[2005],rank[2005],n,num[2005];

int s[2005][2];

bool vist[2005],vist1[2005],vist2[2005];

void dfs(int v)

if(father[v]==v)

return;

if(!vist2[v])

vist2[v]=true;

dfs(father[v]);

}void dfs1(int i)

if(s[i][1]==s[j][1]&&s[i][0]s[j][0])

}}int main()

memset(vist,false,sizeof(vist));

memset(vist1,false,sizeof(vist1));

memset(vist2,false,sizeof(vist2));

for(int i=0; ifor(int i=0; iint cnt=0;

for(int i=0; iprintf("%d\n",cnt);

for(int i=0; iif(!vist1[i])

}return 0;

}

zoj 3761(並查集 搜尋)

題意 在乙個平面上,有若干個球,給出球的座標,每次可以將乙個球朝另乙個球打過去 只有上下左右 碰到下乙個球之後原先的球停下來,然後被撞的球朝這個方向移動,直到有乙個球再也撞不到下乙個球后,這個球飛出,球只能是朝上下左右四個方向打,並且要乙個球四個方向都沒有球了,這個球就不能打了。問說最少平面上剩幾個...

團夥 並查集 題解 並查集 搜尋

1 1270海戰 題目描述 在這個著名的遊戲中,在乙個方形的盤上放置了固定數量和形狀的船隻,每只船卻不能碰到其它的船。在這個題中,我們僅考慮船是方形的,所有的船隻都是由圖形組成的方形。編寫程式求出該棋盤上放置的船隻的總數。輸入輸入檔案頭一行由用空格隔開的兩個整數r和c組成,1 r,c 1000,這兩...

逆向並查集(ZOJ 3261)

與並查集不同,給出乙個圖中原有的一些邊,然後給出操作,操作不是向圖中新增邊,而是在已有的邊上,將邊刪除。對於該種情況,需要把首先讀入所有操作,把要求刪除的邊全部刪除,再按照從後往前的順序處理操作,這樣刪邊操作又重新轉化為了添邊的操作。例題 zoj3261 connections in galaxy ...