poj1182 食物鏈(並查集 好題)

2022-05-18 16:34:03 字數 1247 閱讀 7195

並查集經典題

對於每只動物建立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編...