P1341 無序字母對

2021-09-10 01:26:11 字數 883 閱讀 7541

題目乍一看就是 dfs ,拼接字母,但是資料量不一定純 dfs 暴力就能解決,所以我們換個角度,每個相同的字母可以連在一起,我們最終是要給他們連成乙個句子,那麼我們把每個相同的單詞看做節點,這就是個尤拉迴路啊。。

那麼這樣就好處理了,開始判斷,因為一共最多 52 個字母,所以只有 52 個點,我們記錄入度出度,一旦入度出現大於2的,肯定不行了,一旦入度為1的 肯定是起點或終點,如果都為偶數就是個環,然後再以字典序比較低的字母作為起點,跑一邊尤拉迴路,得出結果倒敘輸出。。就完成了。。。。

以下是ac**

#includeusing namespace std;

inline int read()

while(c>='0'&&c<='9')

return s*w;

}inline int asc(char x) //字元轉化為數字

inline char get(int x)//數字轉化為字元

const int maxn = 1005;

int mp[maxn][maxn];

int in[maxn];

int s[maxn],tot;

void add(int a,int b)

void dfs(int x)

}s[++tot] = x;

}int main()

int cnt = 0, st = 55;

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

}if(cnt !=0 && cnt != 2)

if(cnt == 0)}}

tot = 0;

dfs(st);

for(int i=tot;i>0;i--)

return 0;

}

P1341 無序字母對

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

P1341 無序字母對

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

落谷P1341無序字母對

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