題意:一共有abc三種動物,a吃b,b吃c,c吃a,
現在共有n個動物,編號1~n,給出k句話,判斷真假;
每句話包含val,u,v;
val==1,代表u,v,是同類,val==2代表u吃v
假的條件為:
1.與前面某些真話衝突;
2.u,v,大於n
3.當val==2時,u!=v, 即不能自己吃自己;
思路:有聯絡的為乙個集合,0代表和集合根同類,1代表吃集合根,2代表被集合根吃;
剛開始是每個動物都是乙個集合,根為他們自己;然後進行集合運算,具體看大神部落格:帶權並查集/
進行集合運算的意義是通過每個動物與根的關係推導每個動物之間的關係,至於規律,看上面鏈結中的表;
ac**:
#include #include #include #include using namespace std;
const int maxn=1e5+10;
int mes[maxn],fa[maxn],n;
void init(int n)
}int find(int x)
}int check(int u,int v,int val)
void merge(int u,int v,int val)
}int main()
cout
}
poj 1182 帶權並查集
description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是...
poj1182 帶權並查集
題意 中文題就不描述了 思路 帶權並查集模板題 加入乙個陣列 表示這個點和它父節點的關係 表示同類,表示父親吃它,表示它吃父親 每次需要更新和父親之間的關係 include includeconst int n 50005 int p n r n n,k void init int x int fi...
POJ 1182 帶權並查集
食物鏈 time limit 1000ms memory limit 10000k total submissions 89563 accepted 26905 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...