HDU 3018 AntTrip 尤拉迴路

2021-09-28 16:59:09 字數 2095 閱讀 9203

題目連線 ->vjandhdu

給乙個無向圖, 一條路只能走一次, 問幾次能盡可能走完全圖

也就是一筆畫, 問幾筆畫完全圖

不存在單獨存在 n 個節點的情況

公式:連線一張圖連線需要的筆數 = 奇數度節點個數/2+尤拉迴路

#include

using

namespace std;

#define rg register

#define sc scanf

#define pf printf

typedef

long

long ll;

class

disjointset

;disjointset

(int _n ):n

(_n)

;void ini (

int n )

int get (

int x )

bool merge (

int x,

int y )

}ds;

int degree[ds.maxn]

;bool isodddegree[ds.maxn]

;int main (

)int sum =0;

for(

int i =

1; i <= n; i++

)// 統計奇數度節點個數

if( degree[i]&1

) isodddegree[ds.

get(i)]=

true

,// 同時確定偶數度節點

sum++

; sum /=2

;// 含奇度節點的圖需要奇數度節點個數/2筆才能畫完

for(

int i =

1; i <= n; i++

)// 統計尤拉迴路 且 不是乙個單獨的點 ||||| 注意是迴路

if( i==ds.

get(i))if

(!isodddegree[i]

&& degree[i]

) sum++

; pf (

"%d\n"

, sum );}

return0;

}

#include

using

namespace std;

#define rg register

#define sc scanf

#define pf printf

typedef

long

long ll;

const

int maxn =

1e5+10;

int root[maxn]

, degree[maxn]

;bool isodddegree[maxn]

;int get (

int x )

void merge (

int x,

int y )

int main (

)int sum =0;

for(

int i =

1; i <= n; i++

)// 統計奇數度節點個數

if( degree[i]&1

) isodddegree[

get(i)]=

true

,// 同時確定偶數度節點

sum++

; sum /=2

;// 含奇度節點的圖需要奇數度節點個數/2筆才能畫完

for(

int i =

1; i <= n; i++

)// 統計尤拉迴路 且 不是乙個單獨的點 ||||| 注意是迴路

if( i==

get(i))if

(!isodddegree[i]

&& degree[i]

) sum++

; pf (

"%d\n"

, sum );}

return0;

}

尤拉路徑 hdu 3018 Ant Trip

給定乙個無向圖,每條邊只走一次,可以有多個出發點,最多要多少個出發點?不考慮孤立點 即找至少需要多少個尤拉路徑 首先判斷聯通分量。再在每個連通分量中,奇數度點個數為0,需要出發點1個 尤拉迴路 奇數度點位非0個 記為cnt 需要出發點cnt 2個 乙個連通圖 無向圖 中,奇數度點的個數為偶數個。證明...

HDU 3018 Ant Trip 尤拉迴路

一筆畫問題,問需要多少筆才能把邊畫完,如果乙個連通分量是尤拉迴路 所有點的度數都是偶數,對於無向圖來說 那麼這個連通分量可以一筆畫完,如果乙個連通分量不是尤拉迴路,那麼需要的筆畫數是這個連通分量中奇數度數點的個數除以2。孤立點不連邊,顯然不考慮。include include include inc...

HDU3018Ant Trip 尤拉迴路

題目位址。解題報告 尤拉迴路 圖g,若存在一條路,經過g中每條邊有且僅有一次,稱這條路為尤拉 路,如果存在一條迴路經過g每條邊有且僅有一次,稱這條迴路為尤拉迴路。具有尤拉迴路的圖成為尤拉圖。判斷尤拉路是否存在的方法 有向圖 圖連通,有乙個頂點出度大入度1,有乙個頂點入度大出度1,其餘都是出度 入度。...