洛谷1341 無序字母對(尤拉迴路)

2022-05-14 14:47:55 字數 840 閱讀 5708

點此看題面

大致題意:給你\(n\)個各不相同的無序字母對(注意:兩個字母可能相同,被這個坑了好幾次),請構造乙個長度為\(n+1\)的字串包含每個字母對。

這是一道裸的尤拉迴路,只不過是字串版的,步驟較經典版略顯麻煩。

依照尤拉迴路的思路,我們先統計出每個字母出現的次數。然後對其中奇點的個數分類討論:

若沒有奇點:則可以從任意乙個點開始遍歷。由於題目中要求字典序最小,所以從字典序最小的點開始遍歷。

若有兩個奇點:則可以從任意乙個奇點開始遍歷。由於題目中要求字典序最小,所以從字典序較小的奇點開始遍歷。

若以上兩種情況皆不滿足:說明無解,輸出「no solution」。

#include#define max(x,y) ((x)>(y)?(x):(y))

#define min(x,y) ((x)<(y)?(x):(y))

#define ll long long

#define swap(x,y) (x^=y,y^=x,x^=y)

#define n ('z'-'a'+1)

using namespace std;

int n,ee=0,cnt=0,in[n+5],f[n+5][n+5],ans[100000];

inline void write(int x)

inline void dfs(int x)//dfs跑一遍尤拉迴路

int main()

無序字母對 洛谷1341 尤拉迴路

給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串中出現。第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no solution 如果有多種...

尤拉迴路 洛谷 P1341 無序字母對

很狗的一道題 這種題在我們紹興一中出題人是要被阿掉的 首先就是兩個char會出現相同的情況 然後每個char最多出現52次 所以n其實不小的 我靠 這些東西都沒有很明白的說清楚 然後我們發現n對關係n 1個點 就是尤拉迴路 其實就是一筆畫問題 度數為奇的點為2或者0的話可以有一筆畫 那麼對於這兩種情...

尤拉迴路 無序字母對

無序字母對的題目鏈結 思考 為什麼路徑要倒著存放 尤拉迴路中的奇度頂點必須是2個或者0個,才可以一筆畫完 include 差值是6 using namespace std 100 100 int flag 100 int book 100 int book2 100 100 stack int q ...