社区讨论
求助基于 Tarjan 的 LCA
P5002专心OI - 找祖先参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @ltll6z1f
- 此快照首次捕获于
- 2024/03/10 22:05 2 年前
- 此快照最后确认于
- 2024/03/11 12:49 2 年前
为什么本代码 测试点 RE, 测试点 MLE?
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1e4+4;
#define int short
#define pii pair<int,int>
int n,r,m;
int u,v;
vector<int>G[N];
vector<pii>Q[N];
int fa[N],ans[N];
bool vis[N];
int cnt;
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void dfs(int u){
fa[u]=u;
vis[u]=1;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(vis[v]){
continue;
}
dfs(v);
fa[v]=u;
}
for(int i=0;i<Q[u].size();i++){
int v=Q[u][i].first;
if(vis[v]){
ans[Q[u][i].second]=find(v);
}
}
}
int ds[N];
int x;
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>r>>m;
for(int i=1;i<n;i++){
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cnt++;
Q[i].push_back({j,cnt});
Q[j].push_back({i,cnt});
}
}
dfs(r);
for(int i=1;i<=cnt;i++){
ds[ans[i]]++;
}
while(m--){
cin>>x;
cout<<ds[x]<<"\n";
}
return 0;
}
验证码
7888 祭。回复
共 3 条回复,欢迎继续交流。
正在加载回复...