推薦blog傳送門,超級詳細:
做題思路:
種類並查集,首先利用乙個陣列a來確定並查集關係,同時在建立乙個陣列b來表示某點與他們的boss點(根點)的關係。
現規定:
0: 某點與他的根點為同類
1: 某點與他的根點的關係為, 根點種類的動物的可以吃掉該點種類的動物
2: 某點與他的根點的關係為, 該點種類的動物的可以吃掉根點種類的動物
至於 那兩個重要公式(**已標註),如果自己不想推就去看推薦的那個blog,很詳細。
幾點注意:
1.如果兩點沒有並查集關係,首先給他們確定並查集關係
2. 如果兩點有了並查集關係,檢驗他們所陳述的與根點的關係是否相同
3. 注意 輸入的資料大於n的時候 不要讓他們進入mergy函式
**如下
#include #include#include#include using namespace std;
int ans;
int a[50100];
int b[50100];
void init ()//初始化兩個陣列
}int get_boss(int x)
}void mergy(int z,int x, int y)
else
}else
else
}}int main ()
{ int n,m,x,y,z;
scanf("%d %d",&n,&m);
init();
ans=0;
while(m--)
{scanf("%d %d %d",&z,&x,&y);
if(x>n|| y>n) ans++; //false
else if(x==y && z==2) ans++; // false
else mergy(z,x,y);// n
食物鏈(種類並查集)
食物鏈 動物王國中有三類動物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是同類。第二種說法是...
種類並查集 食物鏈
題意 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y,...