剛開始拿到這道題的時候, 由於是並查集專題,滿腦子想的都是怎麼用並查集來做,但是我肯定這道題肯定是能用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 ...