在 YTP 小鎮中,有 $n$ 個駐紮點可以讓警衛駐守,分別由 $1$ 編號到 $n$。某些駐紮點之間由道路連接,我們稱這樣的駐紮點相鄰,共有 $m$ 條道路。
小鎮需要安排警衛駐守這些駐紮點。每位警衛只能駐守在一個駐紮點上,而一位警衛所能守衛的範圍是他所在的駐紮點,以及與他所在駐紮點相鄰的所有駐紮點。
為了避免警衛之間干擾或重複守衛的資源浪費,規定兩位警衛不能駐紮在彼此相鄰的兩個駐紮點上。
你需要找出所有的「合法配置」,即符合下列條件的駐紮點集合 $S$:
請你找出所有這樣的集合 $S$,並將其中的駐紮點編號由小到大排序後輸出。
若有多個符合條件的 $S$,請按字典序遞增排序全部輸出。
註:
集合的字典序遞增排序,是指將集合中的元素視為有序數列(例如以升序排列),並根據字典序進行排序。
更正式地說,給定二集合 $A, B$ ,將他們都表示為一個升序排列的序列
我們說 $A$ 在字典序上小於 $B$,當且僅當存在某個索引 $t$,使得以下其中一種情況成立:
若一個集合序列依此順序排列,則稱其為集合的字典序遞增排序。
例如:
第一行有兩個整數 $n, m$ , $n$ 代表駐紮點數量, $m$ 代表道路數量。
接下來的 $m$ 行,每行有兩個正整數 $x, y$ ,表示駐紮點 $x$ 與駐紮點 $y$ 相鄰。
每一行輸出一組合法的駐紮點集合 $S$,元素依序由小到大排列,元素間以空格分隔。
若有多組 $S$ ,按字典序由小到大排列整個集合。
5 5 1 2 2 5 3 1 4 5 4 3
1 4 1 5 2 3 2 4 3 5
7 5 1 2 4 2 5 6 1 3 7 5
1 4 5 1 4 6 7 2 3 5 2 3 6 7 3 4 5 3 4 6 7
1 0
1
範例1如圖所示。
範例2中的各連通塊之 $S$ 為 $\lbrace \lbrace 1,4\rbrace ,\lbrace 2,3\rbrace , \lbrace 3,4\rbrace \rbrace , \lbrace \lbrace 5\rbrace , \lbrace 6,7\rbrace \rbrace $,在這組測資中,合法的 $S$ 為各連通塊之 $S$ 的笛卡爾積。
笛卡爾積說明:笛卡爾積是指從每個集合中各取一個元素並組合它們。在此例中,我們從 $\lbrace \lbrace 1,4\rbrace ,\lbrace 2,3\rbrace , \lbrace 3,4\rbrace \rbrace $ 中選一個集合,從 $\lbrace \lbrace 5\rbrace , \lbrace 6,7\rbrace \rbrace $ 中選一個集合,總共有 $3 \times 2 = 6$ 種可能的組合:
範例3中只有一個駐紮點,所以合法的 $S$ 中只有那個點。
YTP 2025 國中組程式挑戰營 p5
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~2 | 範例測試資料 | 0 |
2 | 0~24 | 無額外限制 | 15 |