hdoj1272 小希的迷宮(並查集 坑點)

2021-09-09 07:54:17 字數 841 閱讀 2954

並查集

輸出yes的情況有:

1).該組資料中只有0 0

2).圖中任意兩個結點之間只有一條通路

輸出no的情況有:

1).圖不連通,並查集中有多個父結點

2).待合併的兩個頂點n,m經過查詢發現它們兩個的父結點相同,即已經在同乙個集合中

注意:

1.有些數字不會在一組資料**現,用visit陣列標記出現過的數字

2.在判斷某個結點是否是父結點是用if(visit[i]&&father[i]=i)判斷即可,無需再呼叫查詢父結點的函式,否則容易超時

#include #include #include #include #include #define maxn 100001

using namespace std;

int father[maxn];

int visit[maxn];

int findfather(int x)

bool union(int n,int m)

}int main()

for(i=1;ivisit[n]=visit[m]=1;

bool ans=union(n,m);

if(!ans) flag=false;

while(scanf("%d %d",&n,&m)&&n!=0&&m!=0)

for(i=1;iprintf("%s\n",flag&&(num==1)?"yes":"no");

}return 0;

}

hdoj 1272 小希的迷宮

題目 關鍵點 1.特別小心輸入的格式,這個比較糾結。2.題目的最關鍵點 1 所有點的根節點都相同 即下面的count 1 2 輸入路徑不存在回來,這裡用flag來標記回來 即構成迴路,flag 1 3.注意find3 int x 這裡用路徑壓縮的話,速度會快很多 用空間來換時間 ac include...

hdoj1272小希的迷宮

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

HDOJ 1272 小希的迷宮

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