L3 015 球隊「食物鏈」 DFS 剪枝

2022-02-04 00:18:25 字數 2343 閱讀 8932

時間限制

1000 ms

記憶體限制

262144 kb

**長度限制

8000 b

判題程式

standard

作者李文新(北京大學)

某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。

聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的「食物鏈」,來說明聯賽的精彩程度。「食物鏈」為乙個1至n的排列,滿足:球隊t1戰勝過球隊t2,球隊t2戰勝過球隊t3,……,球隊t(n-1)戰勝過球隊tn,球隊tn戰勝過球隊t1。

現在主席請你從聯賽結果中找出「食物鏈」。若存在多條「食物鏈」,請找出字典序最小的。

注:排列在字典序上小於排列,當且僅當存在整數k(1 <= k <= n),滿足:ak

< bk且對於任意小於k的正整數i,ai=bi。

輸入格式:

輸入第一行給出乙個整數n(2 <= n <= 20),為參賽球隊數。隨後n行,每行n個字元,給出了nxn的聯賽結果表,其中第i行第j列的字元為球隊i在主場對陣球隊j的比賽結果:「w」表示球隊i戰勝球隊j,「l」表示球隊i負於球隊j,「d」表示兩隊打平,「-」表示無效(當i=j時)。輸入中無多餘空格。

輸出格式:

按題目要求找到「食物鏈」t1 t2 ... tn,將這n個數依次輸出在一行上,數字間以1個空格分隔,行的首尾不得有多餘空格。若不存在「食物鏈」,輸出「no solution」。

輸入樣例1:

5

-lwdw

w-ldw

ww-lw

dww-w

ddlw-

輸出樣例1:
1 3 5 4 2
輸入樣例2:
5

-wddw

d-dwl

dd-dw

ddw-d

dddd-

輸出樣例2:
no solution

這題真是意外的卡時間。

這題最重要的一點是,要明白因為取字母序最小的,所以其實就是從序號最小點按序號順序搜得到的第乙個結果就是答案。

所以我的做法是,先把相互連通的點記錄下來('w'或'l',注意這裡'w'和'l'並不一定相互一定,可能1對2是'w',但是2對1是'-'

接著按順序存入vector裡(可以做到dfs時按順序遍歷

然後就直接從0開始dfs(dfs相關思路看**

1 #include 2 #include 3 #include 

4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include

12using

namespace

std;

13 typedef long

long

ll;14

const

int maxn = 22

;15 vectormp[maxn];

16int

nu[maxn][maxn];

17int

vis[maxn];

18char

st[maxn];

19int

n;20

intpath[maxn];

21int

flag;

22void dfs(int s,int

cnt)

29int

i;30

for(i = 0; i < n; ++i)

33if(i == n ) return;34

for(i = 0; i < mp[s].size(); ++i) 42}

43}44int

main()

4557}58

for(int i = 0; i < n; ++i) 62}

63 path[0] = 1

;64 vis[0] = 1

;65 dfs(0, 0

);66

67if(!flag)

71else printf("

%d",path[0] + 1

);72

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

7576

return0;

77 }

view code

L3 015 球隊「食物鏈」 dfs 剪枝

l3 015 球隊 食物鏈 30 分 某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的 食物鏈 來說明聯賽的精彩程度。食物鏈 為乙個1至n的排列,滿足 球隊t...

L3 015 球隊「食物鏈」

時間限制 1000 ms 記憶體限制 262144 kb 長度限制 8000 b 判題程式 standard 作者 李文新 北京大學 某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從...

L3 015 球隊「食物鏈」 30分

某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的 食物鏈 來說明聯賽的精彩程度。食物鏈 為乙個1至n的排列,滿足 球隊t 1 戰勝過球隊t 2,球隊t 2戰勝...