1 #include 2 #include 3 #include 4 #include 5using
namespace
std;67
const
int m = 100005;8
inta, b;
9int father[m]; //
記錄父節點
10bool circle; //
判斷是否存在環
11bool visit[m]; //
用來記錄頂點數
12int edgenum, vnum; //
分別表示邊數,頂點數
1314
void
initial()
1521
22//
(查)23
int find(int
x)24
2728
//(並)
29void merge(int a, int
b)30
41else
42 circle = true; //
x==y,說明他們是同乙個祖先,一旦連通便與祖先3者成環 43}
4445
intmain()
4656
if (a == -1 && b == -1)57
break
;58 visit[a] = true
;59 visit[b] = true;60
merge(a, b);
61while (true)62
70for (int i = 0; i < m; i++)
7175
if (!circle && edgenum + 1 ==vnum)
76 printf("
yes\n");
77else
78 printf("
no\n");
79}80return0;
81 }
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 ...