javascript
[JSOI2010] 满汉全席
題目描述
滿漢全席是中國最豐盛的宴客菜肴,有許多種不同的材料透過滿族或是漢族的料理方式,呈現(xiàn)在數(shù)量繁多的菜色之中。由于菜色眾多而繁雜,只有極少數(shù)博學(xué)多聞技藝高超的廚師能夠做出滿漢全席,而能夠烹飪出經(jīng)過專家認證的滿漢全席,也是中國廚師最大的榮譽之一。世界滿漢全席協(xié)會是由能夠料理滿漢全席的專家廚師們所組成,而他們之間還細分為許多不同等級的廚師。
為了招收新進的廚師進入世界滿漢全席協(xié)會,將于近日舉辦滿漢全席大賽,協(xié)會派遣許多會員當(dāng)作評審員,為的就是要在參賽的廚師之中,找到滿漢料理界的明日之星。
大會的規(guī)則如下:每位參賽的選手可以得到n 種材料,選手可以自由選擇用滿式或是漢式料理將材料當(dāng)成菜肴。
大會的評審制度是:共有m 位評審員分別把關(guān)。每一位評審員對于滿漢全席有各自獨特的見解,但基本見解是,要有兩樣菜色作為滿漢全席的標(biāo)志。如某評審認為,如果沒有漢式東坡肉跟滿式的涮羊肉鍋,就不能算是滿漢全席。但避免過于有主見的審核,大會規(guī)定一個評審員除非是在認為必備的兩樣菜色都沒有做出來的狀況下,才能淘汰一位選手,否則不能淘汰一位參賽者。
換句話說,只要參賽者能在這兩種材料的做法中,其中一個符合評審的喜好即可通過該評審的審查。如材料有豬肉,羊肉和牛肉時,有四位評審員的喜好如下表:
評審一 評審二 評審三 評審四 滿式牛肉 滿式豬肉 漢式牛肉 漢式牛肉 漢式豬肉 滿式羊肉 漢式豬肉 滿式羊肉如參賽者甲做出滿式豬肉,滿式羊肉和滿式牛肉料理,他將無法滿足評審三的要求,無法通過評審。而參賽者乙做出漢式豬肉,滿式羊肉和滿式牛肉料理,就可以滿足所有評審的要求。
但大會后來發(fā)現(xiàn),在這樣的制度下如果材料選擇跟派出的評審員沒有特別安排好的話,所有的參賽者最多只能通過部分評審員的審查而不是全部,所以可能會發(fā)生沒有人通過考核的情形。
如有四個評審員喜好如下表時,則不論參賽者采取什么樣的做法,都不可能通過所有評審的考核:
評審一 評審二 評審三 評審四 滿式羊肉 滿式豬肉 漢式羊肉 漢式羊肉 漢式豬肉 滿式羊肉 漢式豬肉 滿式豬肉所以大會希望有人能寫一個程序來判斷,所選出的m 位評審,會不會發(fā)生 沒有人能通過考核的窘境,以便協(xié)會組織合適的評審團。
輸入輸出格式
輸入格式:
第一行包含一個數(shù)字 K,代表測試文件包含了K 組資料。
每一組測試資料的第一行包含兩個數(shù)字n 跟m(n≤100,m≤1000),代表有n 種材料,m 位評審員。
為方便起見,材料舍棄中文名稱而給予編號,編號分別從1 到n。
接下來的m 行,每行都代表對應(yīng)的評審員所擁有的兩個喜好,每個喜好由一個英文字母跟一個數(shù)字代表,如m1 代表這個評審喜歡第1 個材料透過滿式料理做出來的菜,而h2 代表這個評審員喜歡第2 個材料透過漢式料理做出來的菜。
每個測試文件不會有超過50 組測試資料
輸出格式:
每筆測試資料輸出一行,如果不會發(fā)生沒有人能通過考核的窘境,輸出GOOD;否則輸出BAD(大寫字母)。
輸入輸出樣例
輸入樣例#1: 復(fù)制
1
2 4
h1 m2
m2 m1
h1 h2
m1 h2
輸出樣例#1: 復(fù)制
BAD
Solution
題目太長了,一句話題意,有一些原材料,每個材料可以選擇做兩個菜中的一個,你要選擇這些材料做菜,使得滿足所有的評委要求的菜品,每個評委有兩道菜,至少滿足一個就夠了。
2-SAT?怎么建圖?
我們把一到材料分成兩個點,\(i\)和\(i+n\),看樣例,假設(shè)我們選了m1,我們就不能選h1了,因為一到材料只能做一道菜,那么意味著我們必須要選m2,因為要滿足第一個評委,所以m1向m2連邊,代表選了m1必須選m2,同理,我們選了h2,必須選h1,這還是對于第一個評委的要求。
就這樣建圖,最后跑一遍tarjan縮點,我們只需判斷\(i\)和\(i+n\)是否在同一個強連通分量就行了,如果在同一個強連通分量,說明有沖突,根據(jù)邊的含義,這意味著同一個材料要同時做兩道菜,所以不合法。
代碼如下:
博主蒟蒻,可以隨意轉(zhuǎn)載,但必須附上原文鏈接k-z-j。
轉(zhuǎn)載于:https://www.cnblogs.com/kzj-pwq/p/9507567.html
總結(jié)
以上是生活随笔為你收集整理的[JSOI2010] 满汉全席的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch之配置详解
- 下一篇: Spark Streaming