題意:
動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。
現有 n 個動物,以 1 - n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道它到底是哪一種。
有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述:第一種說法是 1 x y,表示 x 和 y 是同類。第二種說法是2 x y,表示 x 吃 y。
此人對 n 個動物,用上述兩種說法,一句接一句地說出 k 句話,這 k 句話有的是真的,有的是假的。當一句話滿足下列三條之一時,這句話就是假話,否則就是真話。
1、當前的話與前面的某些真的話衝突,就是假話
2、當前的話中 x 或 y 比 n 大,就是假話
3、當前的話表示 x 吃 x,就是假話
你的任務是根據給定的 n 和 k 句話,輸出假話的總數。
思路:利用並查集,定義三倍的範圍,x表示動物本身,x+n表示x的食物,x+n+n表示天敵(被吃)。如果x吃y,可以理解為三種關係:1、x的食物是y(x+n=y) 。2、x是y的天敵(x=y+n+n)。3、y的食物是x的天敵(x+n+n=y+n)。有點繞。
**
#include
#include
#include
#include <
set>
#include
#include
#include
#include
#include
#include
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define pb push_back
#define t int t
;scanf
("%d",&
t);while(t
--)const ll mod=
1e9+7;
int sum =0;
int f[
50000*3
+10];
int find
(int x)
int main()
}else}}
printf
("%d"
, sum)
;return0;
}/**/
題意:有n種蟲子,m對交配關係,請問有沒有一種昆蟲和同性異性都交配。有就輸出suspicious bugs found!,否則輸出no suspicious bugs found!
思路:還是種類並查集只要開兩倍,x表示同性,x+n表示異性。當x和y交配時,如果x和y在同乙個集合,就說明進行了同**配,如果find(x)!=find(y),那麼就合併x和y+n,合併y和x+n
**:
#include
#include
#include
#include <
set>
#include
#include
#include
#include
#include
#include
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define pb push_back
#define t int t
;scanf
("%d",&
t);while(t
--)const ll mod=
1e9+7;
int sum =0;
int f[
2000*2
+10];
int find
(int x)
int main()
}if(ff)
printf
("suspicious bugs found!\n");
else
printf
("no suspicious bugs found!\n");
}return0;
}
食物鏈 種類並查集
推薦blog傳送門,超級詳細 做題思路 種類並查集,首先利用乙個陣列a來確定並查集關係,同時在建立乙個陣列b來表示某點與他們的boss點 根點 的關係。現規定 0 某點與他的根點為同類 1 某點與他的根點的關係為,根點種類的動物的可以吃掉該點種類的動物 2 某點與他的根點的關係為,該點種類的動物的可...
食物鏈(種類並查集)
食物鏈 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是同類。第二種說法...
食物鏈(種類並查集)
問題描述 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是同類。第二種說法是...