洛谷1341 無序字母對 尤拉路

2021-07-28 06:32:01 字數 2038 閱讀 6768

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

輸入格式:

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

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

輸出格式:

輸出滿足要求的字串。

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

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

輸入樣例#1:

4

aztz

xtax

輸出樣例#1:

xaztx

【資料規模與約定】

不同的無序字母對個數有限,n的規模可以通過計算得到。

題解:剛讀完題目沒有什麼思路,想打個爆搜搞一搞。然而回頭一想這是圖論專題於是畫了個圖,將每對字母連起來,每個字母都要出現而且要n+1個字母,就是要把所有邊不重複走的情況下遍歷一邊。好像叫什麼...尤拉路!對沒錯尤拉路。水題啊開心。然而實現的時候有些蜜汁錯誤搞不懂

const

maxn=100000;

var a:array['a'..'z','a'..'z']of longint;

kk:array['a'..'z','a'..'z']of boolean;

du,v:array['a'..'z']of longint;

ans:array[0..maxn]of char;

n,sum,i,tot:longint;

fi,ch:char;

procedure init;

var i:longint;

ch1,ch2,p1,p2:char;

begin

readln(n);p1:='0';p2:='0';fi:='0';

for i:=1 to n do

begin

readln(ch1,ch2);

inc(a[ch1,ch2]);

inc(a[ch2,ch1]);

inc(du[ch1]);inc(du[ch2]);

// kk[ch1,ch2]:=true;kk[ch2,ch1]:=true;

end;

tot:=0;

for ch1:='a' to 'z' do

begin

if (du[ch1]>0)and(p2='0') then p2:=ch1;

if odd(du[ch1]) then

begin

inc(tot);

if p1='0' then p1:=ch1;

end;

end;

if tot=2 then fi:=p1;

if tot=0 then fi:=p2;

end;

procedure dfs(dep:longint;x:char);

var ch:char;

begin

ans[dep]:=x;

if dep=n+1 then

begin

for i:=1 to n+1 do

write(ans[i]);

halt;

end;

for ch:='a' to 'z' do

if (a[x,ch]>0) then

begin

dec(a[ch,x]);dec(a[x,ch]);

dfs(dep+1,ch);

inc(a[ch,x]);inc(a[x,ch]);

end;

end;

begin

init;

if (tot<>0)and(tot<>2) then

begin

writeln('no solution');

halt;

end;

dfs(1,fi);

for i:=1 to sum do

write(ans[i]);

end.

洛谷1341 無序字母對 尤拉路

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

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

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

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

點此看題面 大致題意 給你 n 個各不相同的無序字母對 注意 兩個字母可能相同,被這個坑了好幾次 請構造乙個長度為 n 1 的字串包含每個字母對。這是一道裸的尤拉迴路,只不過是字串版的,步驟較經典版略顯麻煩。依照尤拉迴路的思路,我們先統計出每個字母出現的次數。然後對其中奇點的個數分類討論 若沒有奇點...