0%

CF-629-E. Tree Queries  E. 树形查询

思路讲解

先把所有点替换为其父节点,然后使用

LCAa1,a2=a1(a1为深度较浅点)a11>a2的路径上LCA(a1,a2)=a1(a1为深度较浅点)\Rightarrow a1在1->a2的路径上这个结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i=1;i<=M;++i){
sort(que[i].begin(),que[i].end(),cmp);
for(int j=0;j<que[i].size();++j){
que[i][j]=Fa[que[i][j]];
}
ll din=in[que[i].back()],dout=out[que[i].back()];
bool isB=false;
for(int j=(int)que[i].size()-2;j>=0;--j){
ll node=que[i][j];
if(in[node]<=din && out[node]>=dout){ // node是不是最深点的父节点?

}else{
cout<<"NO\n";isB=true;
break;
}
}
if(!isB)cout<<"YES\n";
}

AC代码

https://codeforces.com/group/vXvHT09g9Y/contest/1328/submission/327207452

心路历程(WA,TLE,MLE……)