AcWing 1184尤拉迴路(打板子踩坑記)

2022-06-16 07:24:11 字數 1312 閱讀 5380

先給個t,t=1就代表資料是無向圖,t=2就代表資料是有向圖

然後給n, m,表示有n個結點,m條邊。

之後判斷有沒有尤拉迴路,沒有就輸出"no",有就輸出"yes"並輸出一條路徑

注意:有重邊跟自環!

嗯?尤拉板子?然後我一波操作猛如虎,一點提交tle。

why?

一波分析下來,發現是這個自環搞的鬼,我寫的是雙vector巢狀存圖,導致碰到自環時會出現重複遍歷邊的情況,時間複雜度就變成了o(v+e2),哎,還是太年輕了。

嗯,所以就給每個點加個邊的遍歷起點,然後在dfs裡看看進入遞迴前後的遍歷起點有沒有變化,有變化就說明是進入了重邊,那麼這個點就是在那個dfs裡遍歷過了,break就行,沒有變化就照常遍歷。

**:

#include#include

#include

using

namespace

std;

const

int maxn = 2e5 + 10

;bool visit[maxn*2 + 100

];int

fa[maxn];

intindegree[maxn];

intoutdegree[maxn];

intans[maxn];

intcur;

intnext[maxn];

struct

edge

};vector

>g(maxn);

intt;

int find(int

x)bool issame(int a, int

b)void unite(int a, intb)}

bool isok(int

n)

if(indegree[i] & 1) return

false

; }

}else

if(t == 2

)

if(indegree[i] != outdegree[i]) return

false

; }

}return

true;}

void dfs(int x, int

pre)

if(pre != 0) ans[cur++] =pre;

}int

main()

else

unite(u, v);

}if(!isok(n)) cout<<"no"

;

else

return0;

}

尤拉迴路 輸出尤拉迴路的路徑

有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...

尤拉迴路 UOJ117 尤拉迴路 題解

判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...

HDU 1878 尤拉迴路(判斷尤拉迴路)

題目大意 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?解題思路 判斷無向圖是否存在尤拉迴路,判斷每個點的度數是否為偶數 並查集確認連通性。1 include2 include3 include4 define clr arr,val...