EOJ A 昔我往矣(倍增LCA 亂搞)

2022-06-18 02:00:08 字數 1444 閱讀 8506

題解:既然只有5個點,那就無限亂搞,我的做法是不斷取出當前點集兩兩之間的lca插入點集,直到所有兩兩之間的lca都已經在點集中了。

這一步的時間複雜度我感覺是乙個調和級數,是可以被忽略的。

然後對每個點儲存它的最深父親,然後對點集建一棵樹,對這棵樹算邊權貢獻即可。

#includeusing

namespace

std;

const

int maxn=2e5+100

;int

n,q;

struct

node edge[maxn

<<1

];int

head[maxn],tot;

void addedge (int u,int v,int

w)

int father[30

][maxn];

inth[maxn],d[maxn];

void dfs (int

x) }

int lca (int x,int

y)

return father[0

][x];

}int getdis (int x,int

y) int geth (int x,int

y) int

x[maxn],ans,f[maxn];

vector

g[maxn];

void dfs1 (int x,int

f) }

intmain ()

h[1]=1

; dfs(1);

for (int i=1;i<=20;i++) for (int j=1;j<=n;j++) father[i][j]=father[i-1][father[i-1

][j]];

scanf("%d

",&q);

while (q--)

while (1

) }

}if (f) break

; }

for (int i=1;i<=m;i++) f[x[i]]=0

,g[x[i]].clear();

for (int i=1;i<=m;i++)

}else

if (tt==x[j]) }}

}int rt=0

;

for (int i=1;i<=m;i++)

g[f[x[i]]].push_back(x[i]);

}ans=0

; dfs1(rt,0);

printf(

"%d\n

",ans);}}

昔我往矣 樹上亂搞 lca,樹鏈剖分

原做法 樹上倍增 lca,可能生成樹的時候複雜度太高,用的是類似並查集的合併方式。oj上的大佬 樹鏈剖分 lca 先補乙個變數vector 跟著別人的程式修改,發現連續re那麼多次,差別竟在 int dfs與void dfs。re可能是子程式用了函式。按照別人的思路改完了。樹鏈剖分。樹鏈剖分是用子樹...

「昔之善戰者,先為不可勝,以待敵之可勝」的理解

理論 孫子兵法 形篇 孫子曰 昔之善戰者,先為不可勝,以待敵之可勝。不可勝在己,可勝在敵。故善戰者,能為不可勝,不能使敵之必可勝。故曰 勝可知,而不可為。譯文 孫子說 以前善於用兵作戰的人,總是首先創造自己不可戰勝的條件,並等待可以戰勝敵人的機會。使自己不被戰勝,其主動權掌握在自己手中 敵人能否被戰...

昔憂 CEU 驗證碼識別引擎v1 2重大更新

新增 黑白化,新增4種黑白化方式,畫素最多置為黑色 畫素最多置為背景色 非白色畫素置為黑色 自動處理。點 線處理,新增了2大濾鏡,去除干擾線 提取字元。形態學變化,新增了自定義配置功能。新增清除背景色濾鏡,提供了按色值,亮度,以及自動去背景色功能。支援滑鼠自動取色。新增了常規配置,快速去除干擾1 雜...