codevs 2370 小機房的樹
題意:就是求裸的lca
題解:
#include
#include
#include
using
namespace
std;
const
int maxn=100000;
int fa[maxn][21];//第i個節點跳2^j次方步找到的父節點
int dis[maxn][21];//第i個節點跳2^j次方步找到的父節點之間的距離
bool vis[maxn];
int deep[maxn];
int n,m;
int first[maxn],next[maxn];
int tot=0;
struct cces[maxn];
void build(int ff,int tt,int pp)
; next[tot]=first[ff];
first[ff]=tot;
}void dfs(int x)
}for(int i=first[x];i;i=next[i])
}}int lca(int x,int y)
if(x==y)
}for(int i=20;i>=0;i--)
}return fa[x][0];
}int ask(int x,int f)
}return s;
}int main()
dfs(1);
scanf("%d",&m);
for(int i=1;i<=m;i++)
return
0;}
外送 codevs 4605 lca
題目描述 description
顧名思義,給一棵有根樹,以及一些詢問,每次詢問樹上的2 個節點a、b,求它
們的最近公共祖先.
輸入描述 input description
第一行乙個整數n.
接下來n 個數,第i 個數fi 表示i 的父親是fi. 若fi = 0,則i 為樹根.
接下來乙個整數m.
接下來m 行,每行2 個整數a、b,詢問節點(a xor lastans)、(b
xor lastans)的最近公共祖先. 其中lastans 為上乙個詢問的答案,
一開始lastans = 0.
輸出描述 output description
對每乙個詢問輸出相應的答案.
樣例輸入 sample input
100 1 2 3 2 4 2 5 4 9
3 92 7
7 81 1
0 66 11
6 310 7
2 15
7 7樣例輸出 sample output
3資料範圍及提示 data size & hint
30% n,m≤1000
100% n,m≤100,000
題解:
#include
#include
using
namespace
std;
const
int maxn=200000+10;
struct cces[maxn];
int fa[maxn][21];
int deep[maxn];
bool vis[maxn];
int first[maxn],next[maxn];
int tot=0;
void build(int ff,int tt)
; next[tot]=first[ff];
first[ff]=tot;
}void dfs(int x)
}for(int i=first[x];i;i=next[i])
}}int lca(int x,int y)
if(x==y)
}for(int i=20;i>=0;i--)
}return fa[x][0];
}int main()
for(int i=1;i<=n;i++)
}int m;
scanf("%d",&m);
int ans=0;
for(int i=1;i<=m;i++)
return
0;}
Codevs 2370 小機房的樹
2370 小機房的樹 時間限制 1 s 空間限制 256000 kb 題目等級 鑽石 diamond 傳送門題目描述 description 小機房有棵煥狗種的樹,樹上有n個節點,節點標號為0到n 1,有兩隻蟲子名叫飄狗和大吉狗,分居在兩個不同的節點上。有一天,他們想爬到乙個節點上去搞基,但是作為兩...
CODEVS 2370小機房的樹
題目描述description 小機房有棵煥狗種的樹,樹上有n個節點,節點標號為0到n 1,有兩隻蟲子名叫飄狗和大吉狗,分居在兩個不同的節點上。有一天,他們想爬到乙個節點上去搞基,但是作為兩隻蟲子,他們不想花費太多精力。已知從某個節點爬到其父親節點要花費 c 的能量 從父親節點爬到此節點也相同 他們...
CODEVS 2370 小機房的樹
題目描述 description 小機房有棵煥狗種的樹,樹上有n個節點,節點標號為0到n 1,有兩隻蟲子名叫飄狗和大吉狗,分居在兩個不同的節點上。有一天,他們想爬到乙個節點上去搞基,但是作為兩隻蟲子,他們不想花費太多精力。已知從某個節點爬到其父親節點要花費 c 的能量 從父親節點爬到此節點也相同 他...