HDU 1272 小希的迷宮

2021-10-03 20:18:58 字數 1818 閱讀 7523

剛開始拿到這道題的時候, 由於是並查集專題,滿腦子想的都是怎麼用並查集來做,但是我肯定這道題肯定是能用dfs來做的, 需要判斷是否有環並且所有的點都聯通即可。

其實這道題很多方法都可以做,我用的dfs 100+ms過的。

後來用並查集做了一下, 是60+ms, 並且並查集的**要短很多, 以後遇到問題要先想一下!

dfs.

#include

#include

#include

using

namespace std;

const

int n =

1e5+10;

int h[n]

, ne[

10* n]

, e[

10* n]

, idx;

int vis[n]

;void

add(

int a,

int b)

bool

dfs(

int x,

int pre)

elseif(

!dfs

(j, x)

)return

false;}

}return

true;}

intmain()

int sum =1;

memset

(h,-1,

sizeof h)

;memset

(vis,-1

,sizeof vis)

;

idx =

0, res = a;

unordered_set<

int> s;

s.insert

(a); s.

insert

(b);

while

(scanf

("%d %d"

,&a,

&b)&& a !=0)

if(dfs(res, res)

&& s.

size()

== sum +

1) cout <<

"yes"

<< endl;

else cout <<

"no"

<< endl;

}return0;

}

並查集~

#include

#include

#include

using

namespace std;

const

int n =

100010

;int p[n]

;int

find

(int x)

intmain()

memset

(p,-1,

sizeof p)

; unordered_set<

int> s;

s.insert

(a); s.

insert

(b);

int sum =1;

while

(scanf

("%d %d"

,&a,

&b))}if

(flag && sum +

1== s.

size()

) cout <<

"yes"

<< endl;

else cout <<

"no"

<< endl;

}return0;

}

HDU 1272 小希的迷宮

description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從房間b走到房間a...

Hdu 1272 小希的迷宮

並查集 1.輸入的時候進行合併。當前讀入的兩個點如果屬於乙個集合,肯定輸出no。2.判斷一下是否有孤立點。3.當輸入0 0時,輸出yes。ac include include include include include using namespace std const int room 100...

hdu 1272 小希的迷宮

並查集判斷給出的圖是否是樹 判斷是否有環 未給出點數判斷集合數是否大於1 判斷有環 若輸入兩點的根相同則有環 判斷所有點是否都在同一集合內 合併過程中把出現的點都標記,把最小和最大的找到,列舉在該範圍內的點,看有幾個根,有幾個根就有幾個集合。include include includeusing ...