poj 2337 Catenyms 尤拉路徑

2021-08-21 20:34:45 字數 923 閱讀 7126

poj 2337

題意:給你一些單詞,單詞a的結尾若等於單詞b的開頭,就可以連線ab,要求把所有單詞連線起來,如果情況有多種,要求字典序最小,如果不能連線所有單詞,輸出***。

思路:這個題看起來是求哈密頓路,實則求尤拉路,把每個單詞的開頭和結尾當做一條邊連線起來,那麼在這個有向圖中,存在尤拉路則有解,不過需要注意的是,需要並查集判斷圖是否聯通,不連通無解,以及根據尤拉路的性質:要麼所有出度等於入度,要麼僅存在乙個點出度=入度+1和乙個點入度=出度+1,才能有尤拉路,關於字典序最小,可提前將單詞排好序建圖即可。

#include#include#include#include#include#include#includeusing namespace std;

const int maxn=1e3+10;

struct node

;vectorg[30];

int d1[30],d2[30],par[30];

string s[maxn];

stackans;

void init()

}int find(int x)

void dfs(int u,int id)

if(id)

ans.push(id);

}void print()

); u=find(u),v=find(v);

if(u!=v)

par[u]=v;

} int p=s[1][0]-'a';

int start=p,flag=1,res=0,res1=0;

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

}if(!flag||res==1||res>2||(res==2&&res1!=1))

dfs(start,0);

print();

}}

poj 2337 Catenyms 尤拉路徑

題意 給定一些單詞,假設乙個單詞的尾字母與還有乙個的首字母同樣則能夠連線。問能否夠每乙個單詞用一次,將全部單詞連線,能夠則輸出字典序最小的序列。bin 神的板子 include include include include include include include include inclu...

Catenyms(尤拉通路)

題目 分析 根據題目的意思可以想到兩個方向 把字串當做點,兩點能形成接龍形式則連一條有向邊,這是問題變成求一條點不重複的路且經過每乙個點。這就像乙個路徑覆蓋問題,但是圖上各種多重邊讓筆者不知道怎麼搞所以放棄這個想法 把字串當做邊,以26個字母為頂點建圖,問題變成求邊不重複的路且經過每一條邊,顯然這是...

Catenyms (尋找有向尤拉路 輸出路徑)

題目鏈結 大意 給你一串單詞,首尾相同的單詞才能相連,存在的話按字典序最小的輸出。單詞的首尾暗示了這是乙個有向圖 思路 本題的目的是考察找有向圖存在尤拉迴路的條件,1.如果圖連通,且每個點的出度等於入度,則存在尤拉迴路 2 如果圖連通,且恰有一點u的出度比入度大1,另有一點v的出度比入度小1,其餘的...