A 尤拉迴路 並查集 HDU 1878

2021-08-17 09:38:33 字數 1317 閱讀 6278

題目連線

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

input

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

束。 output

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

sample input

3 3

1 2

1 3

2 3

3 2

1 2

2 3

0 sample output 1 0

解題思路

一開始wa了一發傷心(因為沒有判斷圖是否連通,一定特別注意尤拉圖是連通圖)

1.尤拉圖的特點:

2.尤拉路徑:從乙個節點出發走一次可以經過所有的邊,如果是迴路則是尤拉迴路

3.尤拉迴路:

無向圖:所有節點度為偶數,圖聯通(圖聯通這一點很重要,經常忘,此題就是並查集判斷連通性【判斷存在幾個並查塊】)

有向圖:所有頂點出度等於入度,圖聯通

4.尤拉路徑:

無向圖:圖聯通,只有兩個節點是奇度數,其餘的都是偶度數

有向圖:圖聯通,有乙個節點出度大入度1,有乙個節點入度大出度1,其餘節點入度等於出度

#include

#include

#include

#include

using

namespace

std;

int maps[1005];

int father[1005];

int find(int x)

int i=x;

int j;

while(father[i]!=r)

return r;

}int main()

for(int i=0;icin>>x>>y;

maps[x]++;

maps[y]++;

int ax=find(x);

int ay=find(y);

if(ax!=ay)

}int flag=0;

for(int i=1;i<=n;i++)

}int tt=find(1);

for(int i=2;i<=n;i++)

break;}}

if(flag==0)

hdu1878 並查集,尤拉迴路

純裸題。寫著方便理解。題意 判斷乙個無向圖是否存在尤拉迴路。解題思路 並查集判斷一下是否聯通,然後再判斷一下點的度數是否為偶數就行了 include include include include define maxn 2010 using namespace std intf maxn int ...

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

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

HDU1878 尤拉迴路

problem description 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出...