hdu 1878 尤拉迴路

2021-08-08 15:54:54 字數 1250 閱讀 5833

problem description

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

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

0sample output 1 0

【概念】

尤拉迴路:若圖g中存在這樣一條路徑,使得它恰通過g中每條邊一次,則稱該路徑為尤拉路徑。若該路徑是乙個圈,則稱為尤拉(euler)迴路。

該題目是無向圖:

無向圖存在尤拉迴路的充要條件

乙個無向圖存在尤拉迴路,當且僅當該圖所有頂點度數都為偶數,且該圖是連通圖。

度 的概念用這個圖來說吧:

a,b,c,d,e的度為3,f的度為5;也就是從該點引出的邊有幾條,就為幾度

奇數條邊為奇度,偶數條邊為偶度;上圖的頂點度數全為奇度,所以不存在尤拉迴路,也就是不能「一筆畫」。

並查集+路徑壓縮

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1010;

int par[maxn];

int rk[maxn];

int cnt[maxn];

int n,m;

void init()

}int find(int x)

else

}void unite(int x,int y)

}int main()

int k=0;

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

}if(k==n)

else

printf("0\n");

}return

0;}

HDU1878 尤拉迴路

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

HDU 1878 尤拉迴路

演算法思想 判斷乙個圖中是否存在尤拉迴路 每條邊恰好只走一次,並能回到出發點的路徑 在以下三種情況中有三種不同的演算法 一 無向圖 每個頂點的度數都是偶數,則存在尤拉迴路。二 有向圖 所有邊都是單向的 每個節頂點的入度都等於出度,則存在尤拉迴路。以上兩種情況都很好理解。其原理就是每個頂點都要能進去多...

HDU 1878 尤拉迴路

題意 尤拉迴路的判斷條件,一 無向圖 每個頂點的度數都是偶數,則存在尤拉迴路。二 有向圖 所有邊都是單向的 每個節頂點的入度都等於出度,則存在尤拉迴路。以上兩種情況都很好理解。其原理就是每個頂點都要能進去多少次就能出來多少次。三 混合圖 有的邊是單向的,有的邊是無向的。常被用於比喻城市裡的交通網路,...