求助,奇怪的WA+RE+TLE
查看原帖
求助,奇怪的WA+RE+TLE
201971
william_zy楼主2022/7/25 19:10

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,s;
struct Edge{
	int next,to;
};
Edge edge[N];//链式前向星
int ceg;
int f[N],dep[N],id[N];
int hed[N];
vector<int> g[N];
int add_edge(int u,int v){
	edge[++ceg].next=hed[u];
	edge[ceg].to=v;
	hed[u]=ceg;
}
int p[N][40],len;
void dfs(int x,int fa){
	 f[x]=fa;
	 p[++len][0]=x;
	 id[x]=len;
	 dep[x]=dep[fa]+1;
	 // for(int i=0;i<g[x].size();i++){
	 for(int i=hed[x];i;i=edge[i].next){
	 	if(edge[i].to==fa)continue;
	 	dfs(edge[i].to,x);
	 	p[++len][0]=x;
	 }
}
int compare(int x,int y){
	return dep[x]<dep[y]?x:y;
}
int query(int l,int r){
	int z=log2(r-l+1);
	return compare(p[l][z],p[r-(1<<z)+1][z]);
}
int lca(int x,int y){
	return query(min(id[x],id[y]),max(id[x],id[y]));
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		add_edge(u,v);
		add_edge(v,u);
		// g[u].push_back(v);
		// g[v].push_back(u);
	}
	// return 0;	//这里注释掉#2就WA,不注释掉#2就RE
	dfs(s,0);
	for(int i=1;(1<<i)<=len;i++){
		for(int j=1;j-1+(1<<i)<=len;j++){
			p[j][i]=compare(p[j][i-1],p[j+(1<<i-1)][i-1]);
		}
	}
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		cout<<lca(x,y)<<endl;
	}
}

样例能过,#1下载下来也AC,但是在评测机上WA 记录(注释return0) 记录(不注释return0) 但是改成邻接表就AC。。。

2022/7/25 19:10
加载中...