hiho1291 逆序思維,並查集

2022-09-17 22:30:34 字數 1479 閱讀 9532

題意:在《我的世界》遊戲中放置沙盒,沙盒為體積為1的正方體,按順序給你一些座標,然後問你按上面的順序在這些座標上放置沙盒是否合法:判斷合法的條件a:沙盒必須放置在地面上或者與另外的沙盒共面(只要共面就可以).b:必須從外部放入某個座標,也就說要放置的座標不能被沙盒包圍,也不能從地面下放進去ps:(題中說的是極遠點可以不經過沙盒和地面到達要放置的點)。

for 20% of the data, 1 <= n <= 1000, 1 <= x, y, z <= 10.

for 100% of the data, 1 <= n <= 100000, 1 <= x, y, z <= 100.

題解:我們先不管條件b,只看條件a,然後判斷是否合法。放置完以後我們在再從最後乙個點刪除,具體做法是:(座標都在 1 <= x, y, z <= 100.)放置完沙盒以後,我們在100*100*100這個立方體外邊在建立一層空座標把上,左右,前後全部覆蓋。表示沒有被放沙盒,然後我們把所有的空座標連線在一起放入並查集,然後我們從最後乙個點開始刪點,刪去的點的座標與上下左右前後(如果下不為地的話)的空左邊建立聯絡放入並查集,然後判斷這個刪除的座標與我們在表層建立的左邊是不是有聯絡即可。

#includeusing

namespace

std;

const

int maxn = 150

;int dir[6][3] = ;

inte[maxn][maxn][maxn];

int x[105 * 105 * 105], y[105 * 105 * 105], z[105 * 105 * 105

];int f[115 * 115 * 115

];int find(int

u)void adde(int u, int

v)int

main ()

if(d == 6) fg = 0

; }

if(!fg)

for(int i = 1; i <= 101 * 102 * 102 + 101 * 102 + 101; i++)

f[i] =i;

for(int i = 0; i <= 101; i++)//

橫座標for(int j = 0; j <= 101; j++)//

縱座標for(int k = 1; k <= 101; k++)//

豎座標 }

for(int i = n; i >= 1; i--)

int x = find(x[i] * 102 * 102 + y[i] * 102 +z[i]);

int y = find(101 * 102 * 102 + 101 * 102 + 101

);

if(x !=y)

}if(fg) printf("

yes\n");

else printf("

no\n");

}return0;

}

並查集 思維 X Plosives

一 問題描述 題目鏈結 有n種化合物,每種化合物由兩種元素組成。當幾種的化合物數量等於他們所含不同元素的數量時,就會發生 現在依次給出化合物的組成,當新的化合物與之前的化合物放在一起會發生 時,就不能允許這個化合物放進來。輸出拒絕的次數。二 問題分析 把元素看成點,化合物看成邊,每次新的化合物進來當...

Hiho 無間道之並查集

題目 時間限制 20000ms 單點時限 1000ms 記憶體限制 256mb 描述這天天氣晴朗 陽光明媚 鳥語花香,空氣中瀰漫著春天的氣息 額,說遠了,總之,小hi和小ho決定趁著這朗朗春光出去玩。但是剛剛離開居住的賓館不久,抄近道不小心走入了一條偏僻小道的小hi和小ho就發現自己的前方走來了幾個...

A 食物鏈(並查集 思維)

我覺著這道題是很經典的並查集 思維題 題意很好理解,主要是如何去理解並查集 運用並查集解決這道題 首先先把並查集搞明白 並查集 用於歸類的資料結構 我相信剛接觸的肯定懵逼,嘻嘻 首先我用 釋 那麼這就是它歸類的大概思路 那麼如何實現呢?其實如果你對bfs記錄路徑很熟悉的話 只不過bfs記錄路徑需要s...