hdu 1116 尤拉迴路 並查集

2021-06-26 11:12:47 字數 1183 閱讀 5819

給你一些英文單詞,判斷所有單詞能不能連成一串,類似成語接龍的意思。但是如果有多個重複的單詞時,也必須滿足這樣的條件才能算yes。否則都是不可能的情況。

尤拉迴路和尤拉通路的判定可以總結為如下:

1)所有的點聯通

2)尤拉迴路中所有點的入度和出度一樣。

3)尤拉通路中起點的入度 - 出度 = 1,終點的 初度 - 入度 = 1, 其他的所有點入度 = 出度;

所以用並查集搞就好了

#pragma comment(linker, "/stack:36777216")

#pragma gcc optimize ("o2")

#include #include #include #include #define rd(x) scanf("%d",&x)

#define rd2(x,y) scanf("%d%d",&x,&y)

#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define clr0(x) memset(x,0,sizeof(x))

typedef long long ll;

#define maxn 30

int fa[maxn],vis[maxn];

int f(int x)

void merge(int x,int y)

int out[maxn],in[maxn],ans[maxn],i,j;

char s[1000];

void solve()

int cnt = 0;

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

if(vis[i] && f(i) == i)

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

if(vis[i] && out[i] != in[i])

if(cnt == 1 || cnt == 3 && (out[ans[1]] - in[ans[1]] == in[ans[2]] - out[ans[2]]) && abs(in[ans[2]] - out[ans[2]]) == 1)

puts("ordering is possible.");

else

puts("the door cannot be opened.");

return;

}int main()

hdu((1116))尤拉迴路和通路。。

題目大意 給你n個單詞,要你判斷這些單詞能不能首尾相連。把每個單詞的首尾字母有一條有向邊相連,記錄每個字母的入度和出度把每兩個能連的單詞用一條有向邊邊相連,既是要判斷該有向圖圖是否有尤拉通路,至於尤拉迴路和尤拉通路的判定可以總結為如下 1 所有的點聯通 2 尤拉迴路中所有點的入度和出度一樣。3 尤拉...

HDU 1878 尤拉迴路(並查集 尤拉迴路判定)

解題思路 尤拉迴路的定義 從圖中某一頂點出發,所有邊僅經過一次,最後回到該頂點。判斷尤拉迴路 前提 這個圖是連通的,也就是所有點都連在乙個圖上了 無向圖 頂點度數為偶數 有向圖 所有點入度 出度 判斷是否連通用並查集即可,另外就是度數的統計。對於並查集陌生可以參考 includeusing name...

尤拉迴路 並查集

時間限制 1 sec 記憶體限制 32 mb 提交 6 解決 5 提交 狀態 討論版 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數...