題目大意:首先給你所有的a集合,第i個集合裡的數全部小於i,接著開始構造b集合,第i個b集合是由∪前面所有滿足條件的bk集合的交,滿足條件的bk集合指的是滿足k∈ai,然後給q個詢問,每次詢問一堆b集合的並的元素個數
這題考試的時候我看了挺長時間....到最後也沒想出來...考完了之後xuruifan告訴我是虛樹,然後我就震驚了,因為我沒看出來跟樹有半毛錢關係...
然後就只能回去接著看題,最後發現只有深刻理解了題目讓你幹的事情的本質才能進行下一步
我們可以把b集合想象成一棵樹,根為0,每個節點到根所經過的節點(不包括0)就代表b集合
然後我們開始想象這棵樹的建立,對於第i個b集合,假如他之前的樹都已經建好了,那麼指定集合的交相當於指定節點的lca,這個lca到根的路徑就是這些集合的交,然後我們在她的下面接乙個i節點,就相當於並上了乙個
這樣我們就可以在o(nlogn)的時間複雜度內建出b集合樹
然後有q個詢問,因為詢問總節點個數是有限制的,所以我們只需要像虛樹那樣o(tot logtot)的時間內算出所有的關鍵節點到根的路徑的並
開啟讀入優化會效果顯著
#include#include#include#include#define n 3000010
using namespace std;
int to[n],nxt[n],pre[n],cnt;
void ae(int ff,int tt)
int fa[n][21],d[n],cf[21];
int lca(int x,int y)
if(x==y) return x;
i=17;
while(fa[x][0]!=fa[y][0])
return fa[x][0];
}int dfn[n],cn;
void build(int x)
}int a[n];
bool cmp(int x,int y){return dfn[x]
AcWing 285 沒有上司的舞會
acwing 285.沒有上司的舞會 ural大學有n名職員,編號為1 n。他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。每個職員有乙個快樂指數,用整數 hi 給出,其中 1 i n。現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀...
ACWing 285 沒有上司的舞會
給定一棵樹,節點編號1 n 1 sim n 1 n,每個節點有個權值,要求選出若干個點,使得沒有兩個點之間有邊,並且總權值和最大。問這個最大權值和。輸入格式 第一行乙個整數n nn。接下來n nn行,第i ii行表示第i ii個節點的權值。再接下來n 1 n 1n 1行,每行輸入一對整數l,k l,...
Acwing 285 沒有上司的舞會
ural大學有n名職員,編號為1 n。他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。每個職員有乙個快樂指數,用整數 h i hi 給出,其中 1 i n 1 i n 現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,...