倍增加強學習筆記

2022-05-07 20:39:08 字數 1296 閱讀 9734

因為這幾次考試中的倍增孤都掛了,而且發現自己倍增打得比較少,所以用一篇隨筆來水

再學習。

直接開題:

洛谷 p1967【貨車運輸】

題意:給定一張圖,每條邊上有限重,有q個詢問,每個詢問求x到y的最大運輸重量。

開局思路暴力?一看範圍……

算了吧,要是孤還想活著就別這麼打……

我們再看一下,也就是說x到y中間有很多道路,我們要求出這些道路最小值的最大值。

不妨先考慮如何保證最大,我們可以從中選出一些邊,保證聯通的情況下有最小值的最大值

誒,好像就是要構一棵最大生成樹,再跑lca就可以啦(畢竟暴跳就會tle啊)

上**:

#includeusing

namespace

std;

inline

intread()

while(x!=eof&&x>='

0'&&x<='

9')

return w*f;

}int n,m,num_edge,fa[200001][21],w[200001][21

],q;

struct edge line[200001

];int head[50001],f[200001],vis[200001],dep[200001

];struct tree edge[200001

];inline

bool cmp(edge a,edge b)

inline

int find(int x)

inline

void add(int

from,int to,int

dis)

void dfs(int

pos)

}inline

int lca(int x,int

y)

if(x==y) return

ans;

for(int i=20;i>=0;i--)

if(fa[x][i]!=fa[y][i])

ans=min(ans,min(w[x][0],w[y][0

]));

return

ans;

}int

main()

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

if(!vis[i])

for(int j=1;j<=20;j++)

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

q=read();

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

}

學習筆記 lca 倍增

求一棵樹上兩個節點的最近公共祖先有兩種演算法 tarjan 離線 這篇博文只介紹倍增的寫法.f i j 表示節點 i 的祖先中,與節點 i 距離為 2 j 的節點編號.那麼 f i j beginroot i root father i j 0,i not root f i j f f i j 1 ...

《學習筆記》 倍增 lca

例題 codevs 2370 小機房的樹 簡單來說就是給你乙個n個點的樹,每一條邊都有邊權。詢問有m次,每次給出兩個點,求他們之間的最小邊權和。很容易想到用求樹上字首和和lca,先把兩個點跳到高度相同的地方,再一直往上跳,直到兩個點重合。因為乙個點乙個點的跳太慢了,所以我們倍增的跳來求lca。令f ...

MyBatis加強學習筆記

通過定義resultmap來實現結果集自動封裝到指定物件並返回結果的一種對映方式 resultmap 節點 result 普通列,association 用於一對一關係對映,collection 用於一對多關係對映,也稱為懶載入,在查詢時先載入主資訊,在需要時才查詢從資訊。實現懶載入有以下三點需要注...