UVA10129 尤拉道路

2022-05-02 11:18:06 字數 2194 閱讀 6964

題目

輸入n(n≤100000)個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同(例如 acm,malform,mouse)。每個單詞最多包含1000個小寫字母。輸入中可以有重複單詞。

解題思路

把字母看作結點,單詞看作有向邊,則問題有解等價於圖中存在尤拉道路。有向圖中存在尤拉道路的條件有兩個:一是底圖(忽略邊的方向後得到的無向圖)連通,二是度數滿足不存在奇點或奇點數為2。度數判讀只要在輸入時記錄每個頂點的入度出度,而連通性判斷有兩種:dfs和並查集。

**實現

dfs判斷連通性+特判入出度

1 #include2 #include3

using

namespace

std;45

const

int maxn = 26 + 5;6

int g[maxn][maxn],in[maxn],out

[maxn];

7int vis[maxn]; //

點是否訪問,不是邊

8intn;9

char word[1000 + 10

];10

11void dfs(int

u)1220}

2122

intmain()

2346

47bool flag = true; //

滿足要求為true

48int s_odd = 0,t_odd = 0; //

起始奇點、結束奇點

49for (int i = 0; i < maxn; i++)

5053

else

if (in[i] == out[i] + 1 && !t_odd) t_odd = 1;54

else 55}

56if

(flag)

5761}62

63if (flag) printf("

ordering is possible.\n");

64else printf("

the door cannot be opened.\n");

65}66return0;

67 }

並查集判斷連通性+特判入出度

1 #include2 #include3 #include4 #include5 #include

6 #include7

using

namespace

std;89

const

int maxn = 26 + 5;10

intin[maxn], out

[maxn], flag[maxn], p[maxn], fa[maxn];

11int

n;12

13void

init()

1422

int find(int

x)23

2728

void unite(int x, int

y)29

3435

intmain()

3655

56int cnt = 0; //

記錄連通分量

57int

root;

58for (int i = 0; i < 26; i++)

5965}66

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

6771

72if

(cnt)

7677

int k = 0; //

p[i]記錄度數不等的

78for (int i = 0; i < 26; i++)

7982

if (k == 0)83

87if (k == 2 && (in[p[0]] - out[p[0]] == 1 && in[p[1]] - out[p[1]] == -1) || (in[p[0]] - out[p[0]] == -1 && in[p[1]] - out[p[1]] == 1

))88

92else

9396}97

return0;

98 }

UVa 10129 單詞 (尤拉通路)

輸入n n 100000 個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同 例如acm malform mouse 每個單詞最 多包含1000個小寫字母。輸入中可以有重複單詞。可以看出,把字母看成頂點 最多26個 然後單詞就是有向邊,單詞與單詞之間的...

Uva10129 尤拉迴路

play on wordsuva 10129 ordering is possible.the door cannot be opened.1 include2 include3 include4 const int maxn 26 5 using namespace std 6 7尤拉迴路 8圖是...

UVA10129 尤拉迴路 DFS

第一次寫部落格,以前一直沒有總結過,現在開始對自己學的東西做一些記錄吧,方便以後複習或者就當作留個腳印。筆者目前大一,水平弱弱弱 有不正確的地方或者可以改進的地方還望指出。找夥伴,有想一起學習的朋友可以一起交流交流。email zpengst outlook.com 題目大意 輸入n個單詞,判斷是否...