你知道嗎?一道競程題目需要準備很多東西,包含用來測試參賽者程式碼正確性的測試資料,以及有時候用來檢查正確性的一支稱為 checker 的程式等等,一定要有的東西之外,大多時候出題者會再寫一支程式,稱為 validator,用來確認測試資料都符合題目敘述規定的格式,這道程序稱作 validation。
VVivvi 出了一道新的題目:
給一張 $N$ 個節點 $M$ 條邊的邊帶正權無向圖。求這張圖上的最小簡單環長度。簡單環的意思是一條從一個節點開始,經過至少一條邊最後走回原點的路徑,並且這條路徑上沒有重複的節點。最小簡單環就是邊權總和最小的環,長度是邊權總和。
輸入第一行有兩個整數 $N,M$,以空白隔開。接下來有 $N$ 行,其中第 $i$ 行有三個整數 $u_i,v_i,w_i$,以空白隔開,代表第 $i$ 條邊連接節點 $u_i,v_i$,權重為 $w_i$。
輸入滿足以下限制:
- $1 \leq N \leq 127$
- $1 \leq M \leq \frac{N(N-1)}{2}$
- $1 \leq u_i,v_i \leq N$
- $u_i \neq v_i$
- 任兩個相異點之間最多只有一條邊
- $1 \leq w_i \leq 114514$
輸出第一行包含一個整數 $\ell$,代表你找到的最小簡單環有幾條邊,如果圖上不存在環,輸出 $-1$,否則,接下來輸出 $\ell$ 行,其中第 $i$ 行輸出三個以空白隔開的整數 $u'_i,v'_i,w'_i$,代表環上照繞一圈順序的第 $i$ 條邊是從 $u'_i$ 到 $v'_i$,邊權 $w'_i$ 的邊。
如果圖上存在環,輸出要滿足:
- 每一條邊都存在於圖上($u_i,v_i$ 的順序可以和輸入不同)
- $\forall 1 \leq i < \ell,\ v'_ i=u'_ {i+1}$
- $u'_ 1 = v'_ \ell$
- 邊權總和盡量小
他幫這道題目寫了一個標準程式,用來生成一個正確答案。一般來說,這種題目的 checker 在評測一個參賽者提交的程式碼是否正確時,除了讀入參賽者的輸出以外,也會讀入標準程式生成的正確答案,先檢查兩者輸出的解是否都合法,要是正確答案不合法,這份提交的結果會是 Judge Failed,否則,如果參賽者的輸出不合法,那結果就是 Wrong Answer,兩者都合法的話,接著就檢查參賽者的解和正確答案是否相同,相同就是 Accepted,否則,如果參賽者的解比較差就會得到 Wrong Answer,反之,如果參賽者的解比較好,就會得到 Judge Failed。簡單地說,如果參賽者做錯了就會是 Wrong Answer,但要是參賽者做得比標準程式還要好,那就會發生 Judge Failed 以提醒出題者。
VVivvi 按照以上的原則寫了標準程式、validator 和 checker,幫他驗題的巴乙己看了一下,覺得 VVivvi 寫那麼多程式碼肯定會寫錯東西,於是他試圖寫了一個錯誤的解,希望製造出 Judge Failed,你可以幫他生一個會造成評測他的程式碼時,會發生 Judge Failed 的測試資料嗎?
正式地說,你的測試資料要滿足:
這是以上提到的程式的程式碼(如果看不到裡面的中文,可以下載檔案):
validator 和 checker 使用了 testlib,這是一個常被用來出題的 library,以上的檔案中也有註解說明使用到的 testlib 功能的意義,你不需要實際理解 testlib 的運作和其他註解中沒有說明的功能。
本題沒有輸入。
輸出會使明奕的解獲得 Judge Failed 的測試資料。請注意 validator 在檢查時會嚴格判斷所有的空白字元(和空格與換行),因此請不要輸出多餘的空格或換行,並且測資的每一行最後都要有一個換行,特別注意最後一行的最後面要有恰一個換行。
如果你真的在這題獲得 Judge Failed(或者叫 Judge Error),那代表出題者出包了。
No. | Testdata Range | Score |
---|