牛客 小a與星際探索 bfs

2022-05-03 14:27:25 字數 1931 閱讀 4549

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

小a正在玩一款星際探索遊戲,小a需要駕駛著飛船從1

'>11號星球出發前往n

'>nn號星球。其中每個星球有乙個能量指數p

'>pp。星球i

'>ii能到達星球j

'>jj當且僅當p

i>pj

'>pi

>pj

pi>pj。

同時小a的飛船還有乙個耐久度t

'>tt,初始時為1

'>11號點的能量指數,若小a前往星球j

'>jj,那麼飛船的耐久度會變為t⊕p

j'>t⊕pj

t⊕pj(即t

'>tt異或p

j'>pj

'>nn號星球時耐久度最大為多少

注意:對於每個位置來說,從它出發可以到達的位置僅與兩者的p

'>pp有關,與下標無關

第一行乙個整數n

'>nn,表示星球數

接下來一行有n

'>nn個整數,第i

'>ii個整數表示p

i'>pipi

乙個整數表示到達n

'>nn號星球時最大的耐久度

若不能到達n

'>nn號星球或到達時的最大耐久度為0

'>00則輸出−

1'>−1−1

示例1

複製

3

457 456 23

複製

478

小a有兩種方法到達3

'>33號星球

第一種:1→2

→3'>1→2→31→2→3,最終耐久度為457

⊕456⊕23

=22'>457⊕456⊕23=22457⊕456⊕23=22

第二種:1→3

'>1→31→3,最終耐久度為457⊕23

=478

'>457⊕23=478457⊕23=478

示例2複製

4

2 4 4 2

複製

-1

示例3複製

5

234 233 123 2333 23

複製

253

1⩽n

,∀pi

⩽3000

'>1⩽n,∀pi⩽30001⩽n,∀pi⩽3000

這個題目可以處理一下,也可以不處理,差不多。

這個bfs,需要用vis標記一下,這個vis標記,是去標記這個得到的數值。

這個是為了不超記憶體,讓盡量少的數進入佇列。

還要注意的就是這個題目的理解,應該是只要耐久度大於想去的星球才可以降落。

#include #include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

const int maxn = 3e4;

int a[maxn], b[maxn],k, ans= -1;

bool vis[maxn];

int n;

struct node

};void bfs()

if (vis[y^b[i]]) continue;

vis[y^b[i]] = true;

que.push(node(i, y^b[i]));

} }}int main()

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

bfs();

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

return 0;

}

牛客 小a與星際探索

注意 對於每個位置來說,從它出發可以到達的位置僅與兩者的pp有關,與下標無關 第一行乙個整數nn,表示星球數 接下來一行有nn個整數,第ii個整數表示pipi乙個整數表示到達nn號星球時最大的耐久度 若不能到達nn號星球或到達時的最大耐久度為00則輸出 1 1示例1 複製3 457 456 23複製...

小a與星際探索

題目描述 第一行乙個整數n,表示星球數 接下來一行有n個整數,第i個整數表示pi 輸出描述 乙個整數表示到達n號星球時最大的耐久度 若不能到達n號星球或到達時的最大耐久度為0則輸出 1 示例1輸入 3457 456 23 輸出 478說明 小a有兩種方法到達3號星球 第一種 1 2 3,最終耐久度為...

小a與星際探索 dp

輸入描述 第一行乙個整數n,表示星球數 接下來一行有n個整數,第i個整數表示pi 輸出描述 乙個整數表示到達n號星球時最大的耐久度 若不能到達n號星球或到達時的最大耐久度為0則輸出 1輸入3 457 456 23 輸出478 說明小a有兩種方法到達3號星球 第一種 1 2 3,最終耐久度為457 4...