HDU 6311 尤拉路 最小邊覆蓋

2021-08-21 21:31:13 字數 1096 閱讀 6762

原題:

題意:對於乙個圖(不一定聯通),最少需要多少筆(路徑)能覆蓋所有的邊,還有輸出路徑。

尤拉路,對於乙個聯通的圖,需要max(1,度數為奇數的點 / 2)筆就能畫完。

這題,對於每個聯通塊,把度數為奇數的點,按」對「加邊,(只留兩個點做起點和終點,應該是這樣理解),加的邊就是「虛」邊。

補完圖後,跑乙個dfs,把邊加到集合中,就是要找尤拉路的路徑。

統計時,碰到實邊,res++,同時把路徑不斷加到答案裡。直到碰到虛邊(應該可以理解成不能在這一筆中畫完了,所有要再開一筆)。

#include 

using

namespace

std;

int n,m;

int e = 0;

struct edge;

edge edge[400005];

int head[100005];

int du[100005];

void addedge(int u,int v,int id)

bool vis[100005];

vector

ji;

void dfs1(int u)

}vector

ac;

void dfs2(int u)

}vector

ans[100005];

int res;

int main()

res = 0;

int u,v;

int id = 1;

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

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

// dfs2,同時存乙個補完的圖的尤拉路徑

ac.clear();

dfs2(st);

for(int j = ac.size() - 1; j >= 0; j--) }}

// 輸出

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

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

printf("\n");}}

return

0;}

HDU6311 Cover 尤拉路徑 迴路

hdu6311 cover 給出 n 個點的簡單無向圖,不一定聯通,現在要用最少的路徑去覆蓋所有邊,並且每條邊只被覆蓋一次,問最少路徑覆蓋數和各條路徑 n le 10 5 對於每個連通塊分別處理 考慮每個聯通塊,必然是用最少的尤拉路徑去覆蓋,首先考慮連通塊裡沒有奇數度數的點的情況,這個情況下只要跑尤...

HDU 3018 Ant Trip(尤拉路的條數)

題目位址 題意 告訴你乙個無向圖,問你要一筆畫多少次才能把所有邊都畫一遍,且每條邊僅畫一遍。思路 如果你還沒有理解或者不知道尤拉圖的概念的話,可以看我的另一篇部落格 傳送門,那裡詳細的講了有向圖無向圖的尤拉圖的概念。言歸正傳,這題其實也是一道裸的尤拉鏈路的題目,他其實一筆畫就是要找到邊能全部連起來,...

hdu 3018(尤拉路 並查集)

傳送門 題解 對於一般的無向連通圖,如果有x個點入度為奇數,覆蓋所有邊所需要的筆數是max x 2,1 嚴格證明戳這兒。可以理解為用x 2筆消掉多出來的邊,取1的時候圖是乙個尤拉圖。p.s.注意特判 include include include include using namespace st...