計蒜客NOIP模擬賽4 D1T2小X的密室

2022-05-11 11:57:27 字數 3073 閱讀 2349

小 x 正困在乙個密室裡,他希望盡快逃出密室。

密室中有 n個房間,初始時,小 x 在 1號房間,而出口在 n號房間。

密室的每乙個房間中可能有著一些鑰匙和一些傳送門,乙個傳送門會單向地創造一條從房間 x到房間 y的通道。另外,想要通過某個傳送門,就必須具備一些種類的鑰匙(每種鑰匙都要有才能通過)。幸運的是,鑰匙在開啟傳送門的封印後,並不會消失。

然而,通過密室的傳送門需要耗費大量的時間,因此,小 x 希望通過盡可能少的傳送門到達出口,你能告訴小 x 這個數值嗎?

另外,小 x 有可能不能逃出這個密室,如果是這樣,請輸出"no solution"

第一行三個整數 n,m,k,分別表示房間的數量、傳送門的數量以及鑰匙的種類數。

接下來 n行,每行 k個 0或 1,若第 i 個數為 1,則表示該房間內有第 i種鑰匙,若第 i個數為 0,則表示該房間內沒有第 i種鑰匙。

接下來 m行,每行先讀入兩個整數 x,y,表示該傳送門是建立在 x號房間,通向 y號房間的,再讀入 k個 0或 1,若第 i個數為 1,則表示通過該傳送門需要 i種鑰匙,若第 i個數為 0,則表示通過該傳送門不需要第 iii 種鑰匙。

輸出一行乙個"no solution",或乙個整數,表示最少通過的傳送門數。

樣例輸入1

3 3 2

1 00 1

0 01 3 1 1

1 2 1 0

2 3 1 1

樣例輸出1

2
樣例輸入2

20 40 0

10 18

18 14

19 13

4 14

13 10

5 18

14 1

13 13

10 16

19 11

11 15

10 18

5 8

12 19

7 8

18 6

14 5

9 5

2 17

13 14

18 15

8 18

7 1

13 5

4 6

17 4

1 4

10 10

13 8

19 2

4 9

3 3

5 10

17 5

12 8

19 11

3 16

17 10

18 16

13 13

樣例輸出2

no solution
樣例輸入3

20 50 0

8 10

7 17

5 11

14 20

20 16

8 19

12 11

18 7

17 5

4 15

16 11

11 8

10 12

8 9

16 8

3 16

1 6

3 20

6 10

11 12

6 8

18 17

14 17

3 11

4 19

9 2

8 6

13 2

5 2

12 19

8 10

14 7

6 12

6 4

13 2

8 7

13 19

17 9

3 14

18 20

2 14

4 17

20 15

14 15

2 15

7 20

12 12

18 10

15 9

15 9

樣例輸出3

4

裸的搜尋

把鑰匙的狀態壓縮為二進位制數x<1024

判斷能否傳送?

邊權為需要鑰匙的狀態

dis&x==dis那麼就可以傳送

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7struct

node

8edge[50001

];11

struct

zt12;15

int num,head[5001

];16

int dist[5001][1501],key[5001

],n,k,m;

17bool vis[5001][1501

];18

void add(int u,int v,int

dis)

1926

void

spfa()

27 );

31 dist[1][key[1]]=0;32

while (q.empty()==0)33

48if (vis[v][u.t|key[v]]==0)49

);52}53

}54}55

}56 cout<

no solution";

57return;58

}59intmain()

60 68}69

for (i=1;i<=m;i++)

7077

add(l,r,dis);

78}

79spfa();

80 }

計蒜客NOIP模擬賽 2 D2T2紫色百合

問題描述 牽著你的手的是她,路邊開滿了紫色的百合花 你從夢中醒來,卻依然忘不了夢中的 她百合花,每朵百合花都有乙個權值,在二進位制下寫成一行 1 第 i朵紫色百合的權值在二進位制下寫成i個 1 你想挑出其中一些組成 一束百合花 且價值在二進位制下恰好為乙個 1 後面p個 0 那麼有多少種挑選方案呢?...

計蒜客模擬賽5 D2T2 螞蟻搬家

很久很久以前,有很多螞蟻部落共同生活在一片祥和的村莊裡。但在某一天,村莊裡突然出現了乙隻食蟻獸,螞蟻們為了保全性命而決定搬家。然而這個村莊四面環山,想要離開這個村莊必須要從地洞裡離開,村子裡一共有 2n2n2n 個地洞,分布在山的左右,一邊 nnn 個。左邊的任意乙個地洞都可以通到右邊 nnn 個地...

計蒜客NOIP2018模擬1

t1 最失敗的一道題,其實就是道水題,好幾種寫法,一種都沒想出來。題意轉化後就是 每個數可以選a i 和a i k,最後求使1,2,3,t都存在的最大的t 1和最多能讓多少個數小於等於t。為什麼第一問可以轉化成求有多少個數小於等於t呢?首先不大於k的怪物可以直接殺死,然後大於k的怪物顯然當且僅當血量...