P1341 無序字母對

2021-09-02 17:49:31 字數 975 閱讀 6262

給定n個各不相同的無序字母對(區分大小寫,無序即字母對中的兩個字母可以位置顛倒)。請構造乙個有n+1個字母的字串使得每個字母對都在這個字串中出現。

輸入格式:

第一行輸入乙個正整數n。

以下n行每行兩個字母,表示這兩個字母需要相鄰。

輸出格式:

輸出滿足要求的字串。

如果沒有滿足要求的字串,請輸出「no solution」。

如果有多種方案,請輸出前面的字母的ascii編碼盡可能小的(字典序最小)的方案

考察的還是尤拉通路的問題,通過給出的點構建無向圖,記錄各個點的度數,若度數為奇數的點的個數不為0或2時,不能構成尤拉通路,返回no solution,同時找到起點h後,進行遞迴找尤拉通路

#include#define ll long long

#define inf 0x3f3f3f3f

#define maxn 110

#define qx std::ios::sync_with_stdio(false)

#define n 2100

using namespace std;

int w[250][250],n,deg[250];

char a,b,reg[500];

void euler(int s)

}reg[n--] = s;

}int main()

char h=0;int c=0;

for(int i=0;i<250;i++)

}if(!h)

for(int i = 0; i < 250; i++)

if(deg[i])

if(c && c != 2) return puts("no solution"), 0; // 判斷無解

euler(h);

cout

}

P1341 無序字母對

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

P1341 無序字母對

題目乍一看就是 dfs 拼接字母,但是資料量不一定純 dfs 暴力就能解決,所以我們換個角度,每個相同的字母可以連在一起,我們最終是要給他們連成乙個句子,那麼我們把每個相同的單詞看做節點,這就是個尤拉迴路啊。那麼這樣就好處理了,開始判斷,因為一共最多 52 個字母,所以只有 52 個點,我們記錄入度...

落谷P1341無序字母對

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