傳送門
並查集,只有有一組的兩個點是相同祖先,就說明不符合。除此之外,還需要判斷是否是同一棵樹,因此,用num記錄祖先的數量,若為1則符合。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int inf =
0x3f3f3f3f
;const
int mod =
1e9+7;
typedef pair<
int,
int> pii;
typedef
long
long ll;
const
int n =
100005
;const
int m =
200005
;int p[n]
;//祖先
intget
(int x)
intmain()
if(!p[v]
)int a =
get(u)
, b =
get(v);if
(a == b) same =1;
//相同則說明祖先一樣,已相連
else num--
;//否則,兩人祖先合二為一
p[a]
= b;
cin >> u >> v;}if
(same || num !=1)
puts
("0");
else
puts
("1");
cin >> u >> v;
}return0;
}int
main()
for(
int j =
0; j < q; j++)}
else
for(
int i =
0; i < k; i++
)scanf
("%d"
,&a[i]);
if(bfs(a[0]
))puts
("yes");
else
puts
("no");
}return0;
}
洛谷 P1605 迷宮
問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 題目描述 輸入輸...
洛谷 P1141 01迷宮
題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...
洛谷P1141 01迷宮
01迷宮 問題描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 分析 bfs,對於每個連通的格仔答案都是一樣的...