題目鏈結
(這個題目第一眼看過去感覺和圖好像關係不大,以為是乙個dfs,後來菜才明白這邊是用了尤拉通路的判定用做dfs的剪枝,最後的點不會 tle。
#include
using
namespace std;
const
int nn=
1005
;struct data//cin和cout用怕了 還是char字串叭……雖然這個題目好像用string沒關係的 這邊儲存這個字串和這個字串的長度
;int n;
//表示字串的個數
vectorlinki;
//表示字串集合的陣列
vector<
int>g[nn]
;//用vector存圖
int t1[30]
;//表示乙個字母在字串頭出現的次數
int t2[30]
;//表示乙個字母在字串尾巴出現的次數
bool vis[nn]
;bool ans;
int q[nn]
;//儲存dfs結果
bool
cmp(data aa,data bb)
void
dfs(
int k,
int cnt)
for(
int i=
0; i
.size()
; i++
)//g【k】裡面的兄弟姐妹們是可以跟在k字串後面的
} vis[k]=0
;}intmain()
sort
(linki.
begin()
,linki.
end(
),cmp)
;// //for(int i=0;i
// cout/ }
// cout
(int i=
0; i
)//構造圖
}bool pig=0;
for(
int i=
0; i
if(pig==0)
dfs(0,
0);//如果是尤拉迴路,則任意乙個字串都行,既然要字典序最小那麼就是第乙個開始搜尋
if(ans==0)
printf
("***");
return0;
}
這個題目感覺……詞鏈的字典序有點迷惑,一開始覺得對字串的排序不應該用字典序(也就是上方的cmp)糾結了好久
因為
對於這個資料來說,aac.ca.c明顯比這個我這個**輸出的字典序小w……總之**是ac了,但是資料到現在都還是有點迷惑叭
P1229 遍歷問題
我們都很熟悉二叉樹的前序 中序 後序遍歷,在資料結構中常提出這樣的問題 已知一棵二叉樹的前序和中序遍歷,求它的後序遍歷,相應的,已知一棵二叉樹的後序遍歷和中序遍歷序列你也能求出它的前序遍歷。然而給定一棵二叉樹的前序和後序遍歷,你卻不能確定其中序遍歷序列,考慮如下圖中的幾棵二叉樹 所有這些二叉樹都有著...
P1229遍歷問題
一 題目描述 二 題目分析 剛開始沒怎麼看懂題目,後面畫著畫著樹就知道了這個原理,其實這個題目就是讓我們求根據前序和中序所能得到的樹最多有多少棵。而造成兩個序列不同樹的情況就是單子樹的情況,因此我們需要數單子樹的個數,答案就是2 n次方怎麼數呢?如果前序裡的字元和後序裡的字元相等,且他們的後乙個和前...
1029 遍歷問題
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解檢視執行結果 我們都很熟悉二叉樹的前序 中序 後序遍歷,在資料結構中常提出這樣的問題 已知一棵二叉樹的前序和中序遍歷,求它的後序遍歷,相應的,已知一棵二叉樹的後序遍歷和中序遍歷序列你也能求出它的前序遍歷。然而給定一棵...