題目描述
小倉鼠的和他的基(me
i)(mei)
(mei)友(zi
)sug
ar(zi)sugar
(zi)su
gar住在地下洞穴中,每個節點的編號為1
n1~n
1n。地下洞穴是乙個樹形結構。這一天小倉鼠打算從從他的臥室(a)
(a)(a
)到餐廳(b)
(b)(b
),而他的**同時要從他的臥室(c)
(c)(c
)到圖書館(d)
(d)(d
)。他們都會走最短路徑。現在小倉鼠希望知道,有沒有可能在某個地方,可以碰到他的**?
小倉鼠那麼弱,還要天天被zzq
zzqzz
q大爺虐,請你快來救救他吧!
輸入格式
第一行兩個正整數n
nn和q
qq,表示這棵樹節點的個數和詢問的個數。
接下來n−1
n-1n−
1行,每行兩個正整數u
uu和v
vv,表示節點u到節點v之間有一條邊。
接下來q行,每行四個正整數a、b
、ca、b、c
a、b、c和d
dd,表示節點編號,也就是一次詢問,其意義如上。
輸出格式
對於每個詢問,如果有公共點,輸出大寫字母「y」
「y」「y
」;否則輸出「n」
「n」「n
」。輸入輸出樣例
輸入5 5
2 54 2
1 31 4
5 1 5 1
2 2 1 4
4 1 3 4
3 1 1 5
3 5 1 4輸出y
nyyy
說明/提示
本題時限1s1s
1s,記憶體限制128
m128m
128m
,因新評測機速度較為接近noi
pnoip
noip
評測機速度,請注意常數問題帶來的影響。
20
2020
%的資料 n
<
=200,q
<
=200
n<=200,q<=200
n<=2
00,q
<=2
00 40
4040
%的資料 n
<
=2000,q
<
=2000
n<=2000,q<=2000
n<=2
000,
q<=2
000
70
7070
%的資料 n
<
=50000,q
<
=50000
n<=50000,q<=50000
n<=5
0000
,q<=5
0000
100100
100%的資料 n
<
=100000,q
<
=100000
n<=100000,q<=100000
n<=1
0000
0,q<=1
0000
0解題思路
題意:現有a,b
,c,d
a,b,c,d
a,b,c,
d四點,判斷a
aa到b
bb的最短路和c
cc到d
dd的最短路有無交匯
以下為結論:
先套兩遍lca
lcalc
a,把a
aa和b
bb的,c
cc和d
dd的最近公共祖先求出來,然後求出a
aa和d
dd,b
bb和c
cc 中lca
lcalc
a深度最大的,把得到的深度與a
aa和b,c
b,cb,
c和dd
d的lc
alca
lca深度作比較。如果都大於等於a
aa和b
bb,c
cc和d
dd的lca
lcalc
a深度,則輸出「y」
「y」「y
」,否則輸出「n」
「n」「n
」 推導:
從上圖可以很容易得出: 取max
maxma
x後比較,都是大於等於,輸出y。。。
多推幾組資料,就能理解啦↖( ^ ω ^ )↗
**
#include
.h>
using namespace std;
int n,q,u,v,k,l,r,ll,rr,a1,a2,a3,a4,dep[
100010
],f[
100010][
22],head[
100010
],lg[
100010];
struct ca[
200010];
void
add(int x,int y)
void
dfs(int x,int fa)
}int lca
(int x,int y)
}return f[x][0
];}int main()
for(int i=
1;i<=n;i++
) lg[i]
=lg[i-1]
+(1<
==i)
;dfs(1
,0);
for(int i=
1;i<=q;i++
)}
洛谷3398 倉鼠找sugar
小倉鼠的和他的基 mei 友 zi sugar住在地下洞穴中,每個節點的編號為1 n。地下洞穴是乙個樹形結構。這一天小倉鼠打算從從他的臥室 a 到餐廳 b 而他的 同時要從他的臥室 c 到圖書館 d 他們都會走最短路徑。現在小倉鼠希望知道,有沒有可能在某個地方,可以碰到他的 小倉鼠那麼弱,還要天天被...
洛谷P3398 倉鼠找sugar
裸的lca。對於每次詢問,設a,b的lca為a,c,d的lca為b,分兩種情況討論 1 a與b的深度相同,此時二人相遇的充要條件為a b,即四個點的最近公共祖先相同。2 a與b深度不同,設a的深度大於b的深度,若二人相遇,則c或d與a的lca一定為a。include include define m...
洛谷P3398 倉鼠找sugar
題目大意 給你一棵 n n leqslant10 5 個點的樹,m m leqslant10 5 次詢問,每次詢問路徑 a b 和路徑 c d 是否有交點 題解 經過觀察發現若有交點,在 lca 或 lca 一定有交,判斷一下即可 卡點 無 c code include include includ...