此題是乙個思想簡單, 實現困難的題,因為有很多的小情況
1. 首先--判斷集合是否有環--用並查集 ---> 新加入一條邊的時候
if( find(a) != find(b) )//判斷結果2
union(a, b);
else //若果在未加入時, 發現發現已加入的點與未加入的點同根, 則說明圖中有環
continue;
}
2. 如果直到 0 0, 碰到一組資料結束, 不能說明符合條件!!!
不能說明符合條件!!!
不能說明符合條件!!!
重要的事情說三遍, 不符合是因為,如果之前輸入的資料,組成了若干個不相連的集合, 那麼之前的同根判斷會做出錯誤的判斷
所以要判斷圖的連通性,**如下:
void only_one_gater()
if(cnt > 1) 說明有好幾個不連通的集合
}printf("yes\n");
}
完整**:
#include #include #include #define maxn 100100
using namespace std;
int a, b, temp;
int pre[maxn];
bool vis[maxn];
void init()
int find(int& index)
void union(int& a, int& b)
void only_one_gater()
if(cnt > 1)
}printf("yes\n");
}int main()
if(a + b == -2) //全部結束
return 0;
if( find(a) != find(b) ) //判斷結果2
union(a, b);
else
continue;}}
return 0;
}
hduoj1272 小希的迷宮
題目是判斷給定的圖是否存在環與孤立的點。使用並查集即可判斷,如果存在環路,則必有一條邊使得當這條邊的兩端的頂點的根節點屬於同乙個集合,因而在合併操作的時候判斷這條邊的兩個節點的根節點是否屬於同乙個集合。孤立的點,則會出現,合併的最後仍至少有兩個點的根節點為自身。poj的1308和此題類似 如下 in...
hdoj 1272 小希的迷宮
題目 關鍵點 1.特別小心輸入的格式,這個比較糾結。2.題目的最關鍵點 1 所有點的根節點都相同 即下面的count 1 2 輸入路徑不存在回來,這裡用flag來標記回來 即構成迴路,flag 1 3.注意find3 int x 這裡用路徑壓縮的話,速度會快很多 用空間來換時間 ac include...
HDU 1272 小希的迷宮
description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從房間b走到房間a...