洛谷P1341 無序字母對

2022-05-23 22:24:15 字數 801 閱讀 3791

題目大意:給一張無向圖,找一條字典序最小的尤拉路徑

題解:若圖不連通或有兩個以上的奇數點,則沒有尤拉路徑,可以$dfs$,在回溯時把這個節點加入答案

卡點:沒有在回溯時加入答案,導致出現了尤拉路徑沒走環(少走了一段)

c++ code:

#include #include #include #define maxn 60

int m, start = 52, ind[maxn];

int v[maxn], n, ret[256];

bool e[maxn][maxn];

char ans[maxn * maxn];

int f[maxn];

int find(int x)

void dfs(int u)

ans[m--] = v[u];

}int main()

int cnt = 0;

for (int i = 1; i <= n; i++) if (ind[i] && f[i] == i) cnt++;

if (cnt > 1)

cnt = 0;

for (int i = 1; i <= n; i++) if (ind[i] & 1)

if (cnt > 2)

dfs(start);

puts(ans);

return 0;

}

洛谷 P1341 無序字母對

這道題第一眼以為是一道字串的題,但細想一下是一道求尤拉路的圖論題。把每一對對應關係看成一條邊,本題即求這張圖上是否存在乙個尤拉迴路或尤拉路,並要求字典序最小的方案,那麼我們在dfs的時候就要從該點所連的最小的點開始便利,並將所得的結果存在乙個陣列中,最後逆序輸出。include include in...

洛谷P1341 無序字母對

給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串 現。不同的無序字母對個數有限,n的規模可以通過計算得到。各不相同的無序字母對總數有限,有52 51 2 1326種,這是n的規模。此題的建模是圖論,給出的無序字母...

洛谷P1341 無序字母對

題目鏈結 根據題意,只有在每兩個相鄰的字母都構成乙個要求的無序字母對時,才能滿足要求,我們不妨將每個字母看成乙個節點,每個無序字母對看成乙個無向邊,我們要從乙個點出發,不重複地走完所有的邊,所走的路徑上的點構成的字串即為乙個合法的解 這就轉化成了求一條字典序最小的尤拉路徑 字典序就用堆搞一下就行了 ...