K 尤拉迴路 並查集

2022-03-07 13:47:26 字數 1362 閱讀 5083

點選開啟鏈結

k - 尤拉迴路

尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?

input

測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n ( 1 < n < 1000 )和邊數m;隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到n編號)。當n為0時輸入結 

束。output

每個測試用例的輸出佔一行,若尤拉迴路存在則輸出1,否則輸出0。 

sample input

3 3

1 21 3

2 33 2

1 22 3

0

sample output

1

0

尤拉迴路及尤拉路徑定義:

若圖g中存在這樣一條路徑,使得它恰通過g中每條邊一次,則稱該路徑為

尤拉路徑

。若該路徑是乙個圈,則稱為

尤拉(euler)迴路

。判斷方法:

先用 dfs 或並查集判斷圖的連通性,再根據頂點度的性質判斷。

有向圖尤拉迴路

:所有頂點的入度和出度相等

無向圖尤拉迴路:所有頂點的度數為偶數

有向圖尤拉路徑:所有頂點的入度和出度相等或存在兩個頂點

a、b ,a 的入度比 b 的入度大 1,a 的出度比 b 小 1

無向圖尤拉路徑:所以頂點的度的和為偶數且至多有兩個頂點的度數為奇數

select code

#include

#include

#include

#include

using

namespace

std;

int count=0;

int par[10000];

int aa[1005];

void

init

(int a)

intfind

(int x)

void

join

(int x, int y)

}int

main

() int sum=0;

for(int i=0; iif(par[i]==i)

sum++;

if(aa[i]&1)//aa[i]%2flag=

0;}

if(sum!=1)

flag = 0;

printf("%d\n",flag);

} return

0;}

還可以用dfs來做;

尤拉迴路 並查集

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

hdoj1878尤拉迴路(並查集 尤拉迴路)

description rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partne...

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

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