union find就是所謂的並查集。
本題做的很無語,最後發現居然是輸入搞錯,一直wa。
不能使用迴圈接受輸入,否則是wa的,氣死人,浪費那麼多時間就為了這個。
難點:1 構建關係樹
2 構建公式
3 快速更新公式
要抽象思維出什麼對應什麼的關係和上面是逆關係,就是利用0,1,2構建出父子節點之間的關係值,我是這樣去思考構建出準確無誤的公式的。
這樣的抽象度是挺高的,需要多多訓練。
關係到數學和union find,難度還是挺高的,網上很多人解法了。
我這裡就增加乙個按權值更新的優化演算法,和網上一般的解法不同的地方就是union操作吧,具體**下面的uniontwo()函式。
不過oj的時間提高不多,測試資料不是十分大。
#include const int max_n = 50001;
int n, k;
struct subset
;subset subs[max_n];
void initsubs()
}int findparent(int x)
return subs[x].p;
}void uniontwo(int x, int y, int d)
//3-subs[x].r為逆轉x和xroot的關係值, 3-d為逆轉x和y的值
else
//3-subs[y].r為逆轉yroot和y的關係值
}int main()
else uniontwo(x, y, d);
} printf("%d\n", lies);
return 0;
}
POJ 1182 食物鏈 解題報告
食物鏈 time limit 1000ms memory limit 10000k total submissions 70529 accepted 20875 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...
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編...