1. 程式人生 > >la4487 加權並查集,異或的性質

la4487 加權並查集,異或的性質

兩個數異或是一個值,這個時候只要再有任意一個數,兩個數就都可以知道了 而如果知道了a和b的異或,a和c的異或,顯然就可以知道b和c的異或 對於這題首先我的思路: 我的思路特別麻煩……因為受到了以前做並查集一題的影響:每個數的每一位都存起來,把它與它的反都存一遍,並查集維護與他相同的位的,並且用一個0一個1來表示和其他位的關係 但是問題在於……碰到一大堆異或在一起的話,有一些未知關係不好處理……好煩 網上的思路 pa[]儲存每個的父節點,xor[]儲存每個與父節點的異或值 設定一個特殊節點,比如0或者全1,他必須作為父親節點,然後對於第一種操作,就把一個點與特殊節點連線起來,存異或值,對第二種操作,就把相關節點連起來,注意,如果有一個點的父節點是特殊節點,特殊節點要作為父節點。 對於查詢 首先根據交換律,把在一個集合裡的都弄出來 然後把已知值得都算好 其他集合中,偶數次異或,可以消除根節點,可以計算,奇數次異或,不能消除根節點,不能算 迷之難啊…… //真的不知道看題解有沒有用啊啊……其實這題就是說,有互相異或關係的集合能算,其他不行。