藍書3 7 尤拉迴路

2022-06-01 04:15:11 字數 3412 閱讀 1180

t1 尤拉迴路 hdu 1878

題目大意:

判斷是否存在尤拉迴路

思路:乙個無向圖存在尤拉迴路的條件為所有點的度為偶數 且圖聯通

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define ll long long

10#define inf 2139062143

11#define maxn 10100

12using

namespace

std;

13 inline int

read()

1417

while(isdigit(ch))

18return x*f;19}

20int n,m,fa[maxn],fst[maxn],nxt[maxn<<3],to[maxn<<3

],d[maxn],cnt;

21void add(int u,int v)

22int find(int x)

23void merge(int a,int b)

24int

main()

2533

for(int i=1;iif(find(i)!=find(i+1))

34for(int i=1;i<=n;i++) if(d[i]&1)

35 puts("1"

);36

ed:;37}

38 }

view code

t2 ant trip hdu 3018

題目大意:

最少次一筆畫可以遍歷所有邊

思路:獨立的點對答案沒有貢獻

每個聯通塊如果奇數度的點等於0 ans+1

大於0 ans+=奇數點數/2

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define ll long long

10#define inf 2139062143

11#define maxn 100100

12using

namespace

std;

13 inline int

read()

1417

while(isdigit(ch))

18return x*f;19}

20int n,m,fa[maxn],fst[maxn],nxt[maxn<<2],to[maxn<<2

],d[maxn],cnt,ans,sz[maxn],k[maxn];

21void add(int u,int v)

22int find(int x)

23void merge(int a,int b)

24int

main()

2533

for(int i=1;i<=n;i++) sz[find(i)]++;

34for(int i=1;i<=n;i++) if(d[i]&1) k[find(i)]++;

35for(int i=1;i<=n;i++) if(fa[i]==i&&sz[i]>1) ans+=k[i]?k[i]>>1:1

;36 printf("

%d\n

",ans);37}

38 }

view code

t3 john『s trip poj 1041

題目大意:

求圖中是否存在尤拉迴路 並求出任意乙個尤拉迴路

思路:判尤拉迴路就用度數判一下

然後dfs就行了

但是改變了dfs和把邊加入棧的順序 就wa了

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define ll long long

10#define inf 2139062143

11#define maxn 5010

12using

namespace

std;

13 inline int

read()

1417

while(isdigit(ch))

18return x*f;19}

20int rt,n,m,to[maxn],e[45

][maxn],d[maxn],cnt,st[maxn],top,vis[maxn];

21void dfs(int

x)2225}

26void

solve()

2729

dfs(rt);

30for(int i=top;i>1;i--) printf("

%d "

,st[i]);

31 printf("

%d\n

",st[1

]);32}33

intmain()

34c=read(),e[a][c]=b,e[b][c]=a,d[a]++,d[b]++,cnt++;}

41 memset(e,0,sizeof(e));memset(d,0,sizeof(d));cnt=top=0

;42 memset(vis,0,sizeof

(vis));43}

44 }

view code

t4 太鼓達人 bzoj 3033

題目大意:

給定k 求最長長度的01串

把這個串變成環 使這個環所有長度為k的子串互不相同 

輸出這個串的最長長度 並輸出字典序最小的串

思路:可以發現有1使用dfs搜尋 爆搜能過的原因是因為原圖是乙個尤拉圖

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define ll long long

10#define inf 2139062143

11#define maxn 6010

12using

namespace

std;

13 inline int

read()

1417

while(isdigit(ch))

18return x*f;19}

20int

n,t,vis[maxn],ans[maxn];

21int dfs(int x,int

cnt)

2229

intmain()

30

view code

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

有向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...