BZOJ2851 極限滿月

2021-09-07 02:55:40 字數 807 閱讀 9557

把集合a[i]看作i點的前驅點集合,建成乙個dag,並新建超級源s,向每個前驅集合為空的點連邊,那麼b[i]就是s到i的必經點集合。

首先使用lengauer-tarjan演算法建立出以s為起點的dominator tree,那麼b[i]就是i在樹上的所有祖先。

對於乙個詢問,構造出虛樹,然後統計虛樹上每一條邊上的點數,累加即可。

時間複雜度$o(n+m+q\log n)$。

#include#includeusing namespace std;

const int n=200010,m=500010;

int n,m,q,i,x,q[n],a[n],vis[n],tot,t,ans;

int g1[n],g2[n],gd[n],v[m*3+n],nxt[m*3+n],ed;

int cnt,dfn[n],id[n],fa[n],f[n],mn[n],sd[n],idom[n];

int d[n],size[n],son[n],top[n],st[n],en[n];

inline void read(int&a)

inline void add(int*g,int x,int y)

int f(int x)

void dfs(int x)

void tarjan(int s)

}void dfs2(int x,int y)

inline int lca(int x,int y)

for(i=1;i<=m;i++)vis[a[i]]=0;

} return 0;

}

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 現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,...