暑期前專題題解 資料結構 J

2021-08-22 06:11:31 字數 657 閱讀 3509

並查集的乙個好題目,因為石頭剪刀布的三角關係,我們可以用0表示兩個同類,1表示被它的父親克制,2表示克制它的父親,那麼乙個節點和爺爺節點的關係就變成了,(re[x] + re[pre[x] ])  % 3 ,因為並查集帶壓縮路徑,所以最後join時,最多存在乙個四邊形的關係,討論x和y的根節點是否相同即可。

**如下

#include using namespace std;

const int maxn = 1e5 + 10;

int pre[maxn],re[maxn];

int n,m,opt,x,y,cnt,tag;

void init(int n)

}int find(int x)

void join(int x,int y,int opt)else

}}int main()else if (opt == 2)

if(cnt == 3) cnt = 0;

// cout << re[x] << endl;

}if (!tag) cout << -1 << endl;

return 0;

}

資料結構專題 解題報告 J

原題洛谷p1484種樹,又撿到一題做過的,lucky。所謂用堆來解決問題,從來就是乙個詞,貪心,堆的使用是否成功取決於你貪心的策略,而貪心一般來說處理起全域性最優是有難度的,本題引入了乙個小有名氣的高階貪心策略,反悔貪心。通過讀題,我們發現貪心有乙個尷尬之處在於,你如果選擇了此刻的最大值i,那麼在選...

題解 資料結構 樹狀陣列2

接著上文 說 上文題目打太多了,卡的很 這道題如果還像上一題那樣建樹狀陣列,必然超時 我們要發揮自己模仿的天分,使得原封不動地搬下來就可以a了 前面說到跟上題一樣建樹狀陣列要超時,那我們倒過來,使得單點訪問變為sum,區間修改變為update,有同學肯定想到了差分陣列 沒錯就是他 我們在區間修改,就...

資料結構專題 解題報告 N

很板的題,我建了三棵樹,分別維護區間和最大值最小值,當然更簡潔的寫法是結構體一次掛三個屬性。不過也沒差其實。要注意的是,查詢時初始化最小值最大值要用llinf,之前定義的inf是不夠的,詳見我的巨集定義。話說這兩個還是之前偷看zh的cf上的 學來的 斜眼笑 include define maxn 1...