poj 1182 食物鏈(帶權並查集)

2021-10-02 13:56:09 字數 1247 閱讀 9948

《挑戰程式設計競賽》中的解法:

開三倍的陣列模擬邊之間的關係,結果會memory limit exceeded

#include

int p[

150010

], n, k, d, x, y;

void

init()

}int

find

(int x)

else

return p[x]

=find

(p[x]);

}void

unite

(int x,

int y)

intmain()

}else}}

}printf

("%d"

, cnt)

;return0;

}

後來搜了別人的解法才知道有「帶權並查集」這個東西

普通並查集只有邊與邊之間的關係,帶權並查集就是給邊加上權值

與普通並查集相比有以下區別

1.初始化:每個點的父節點是自己,權值為0

2.路徑壓縮時:

;}3、合併時:

}食物鏈ac**:

#include

int p[

50005

], w[

50005

], n, k, d, x, y;

//權值:0:同種, 1:吃 , 2:被吃

void

init()

}int

find

(int x)

return p[x];}

intmain()

else

else}}

printf

("%d"

, cnt)

;return0;

}

poj 1182 食物鏈 帶權並查集

這個題需要將動物分成3種,每次以y 0為物件,吃他的x為1,需要注意的是下一次碰到x cha函式遞迴更新與x有關的物件 include include include includeusing namespace std define n 50005 int father n num n int c...

poj1182食物鏈 帶權並查集

基本思路 帶權並查集 簡單的理解就是將有關係的點合併到乙個集合,記錄每個點到集合根節點的權重 include include include define max 50010 using namespace std int par max 記錄集合根節點 int offset max 記錄每個節點到...

poj 1182 食物鏈 帶權並查集

食物鏈 time limit 1000ms memory limit 10000k total submissions 50713 accepted 14818 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...