題目連線 ->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,其餘都是出度 入度。...