poj1330(LCA最近公共祖先)

2021-06-26 02:35:16 字數 781 閱讀 8490

題意:求最近公共祖先

思路:之前學習了樹鏈剖分,然後我就用樹鏈剖分的一小部分知識就可以解這個題目了,記錄每個結點的fa和depth。然後查詢時,每次將depth大的結點往上走直到x = y。

**如下:

#include#include#include#include#include#include#include#define n 10005

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define eps 10e-6

using namespace std;

struct node

edge[n];

int tot,head[n],d[n];

void addedge(int u,int v)

int fa[n],dep[n];//son[n],siz[n],

void dfs1(int u,int pa,int depth)

}int find(int x,int y)

return x;

}int main()

int i;

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

if(d[i] == 0) break;

dfs1(i,0,1);

int x,y;

scanf("%d%d",&x,&y);

printf("%d\n",find(x,y));

}return 0;

}

poj1330 LCA離線演算法

模版參考 題目 給定一棵樹,求兩個結點的最近公共祖先。最基礎的lca問題 include include include using namespace std const int maxn 10006 int dp maxn 15 father maxn dep maxn bool hash ma...

POJ 1330(LCA 倍增法模板)

題意 q次詢問求兩個點u,v的lca 思路 lca模板題,首先找一下樹的根,然後dfs預處理求lca u,v ac 1 include2 include3 include4 include5 include 6 include 7 include8 include9 include10 using ...

POJ1330 最近公共祖先

尋找最近公共祖先可以說是樹結構裡相當基礎的知識了。最近學了vector,正好可以派上用場。本題採用雙重鍊錶並行上找的方式。即對於兩個節點u和v,若u的層次比v深,則u去尋找父親,否則v去尋找父親,直至u v。程式中的fa陣列用來記錄父節點,step用以記錄層次,a用以記錄某一節點的兒子。函式中的fi...