並查集經典題
對於每只動物建立3個元素,x, x+n, x+2*n(分別表示x屬於a類,b類和c類)。
把兩個元素放在乙個組代表他們同時發生。
被不合法資料卡了幾次。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8#define lson l, m, rt<<1
9#define rson m+1, r, rt<<1|1
10#define io ios::sync_with_stdio(false);cin.tie(0);
11#define inf 0x3f3f3f3f
12 typedef unsigned long
long
ll;13
using
namespace
std;
14const
int n = 50000;15
int n, k, d, x, y, ans=0;16
int pre[50010*3
];17
int find(int
x)18
22return
x;23}24
int is_same(int a, int
b)25
33void join(int a, int
b)34
39void
solve()
4046
else
if(is_same(x, y+n)||is_same(x, y+2*n))//
衝突情況,b吃a,c吃a
47 ans++;
48else53}
54else
if(d == 2)
59else
if(is_same(x, y)||is_same(x, y+2*n)) //
衝突情況,a同b,c吃a
60 ans++;
61else66}
67}68int
main()
6973 scanf("
%d%d
", &n, &k);
74for(int i = 0; i < k; i++)
78 printf("
%d\n
", ans);
79return0;
80 }
POJ1182食物鏈(並查集經典好題)
題目思路 主要有兩種思路 1.帶權並查集2.挑戰程式上的演算法 個人理解也算是帶權並查集的一種,但是更易懂,思路更清晰 介紹挑戰上的演算法 將整個陣列開到3倍,分3個組,每個組之間的關係確定x,y的關係 判定假話 x,y的關係確定合併哪些組的元素 挑戰程式p88 include include in...
POJ 1182 食物鏈 並查集
此題利用並查集解決。對於每只動物i建立3個元素i a,i b,i c,並用這3 n個元素建立並查集。1 i x表示 i屬於種類x 2 並查集你的每一組表示組內所有元素代表的情況同時發生或不發生。對於每一條資訊,只需要按照下列操作即可 1.第一種 x,y同類,合併x a和y a x b和y b x c...
POJ 1182 食物鏈 (並查集)
食物鏈time limit 1000ms memory limit 10000k total submissions 48713 accepted 14202 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編...