int改void就A了?
查看原帖
int改void就A了?
183761
lvyijia44楼主2020/10/29 11:02
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#define register r 
using namespace std;
typedef long long ll;
const int maxn=5e5+5;

inline int read(){
	int ans=0,f=1;
	char ch=getchar();
	while(ch<'0' || ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9'){
		ans=(ans<<3)+(ans<<1)+(ch&15);
		ch=getchar();
	}
	return ans*f;
}

int n,m,s;

int head[maxn],cnt;
struct edge{
	int to,next;
}e[maxn<<1];
inline void build(int u,int v){
	e[++cnt].to=v;
	e[cnt].next=head[u];
	head[u]=cnt;
}

int fa[maxn][20],d[maxn];
inline int dfs(int u){
	for(int i=head[u];i;i=e[i].next){
		int v=e[i].to;
		if(d[v])continue;
		d[v]=d[u]+1;
		fa[v][0]=u;
		for(int i=1;(1<<i)<=d[u];i++)
			fa[v][i]=fa[fa[v][i-1]][i-1];
		dfs(v);
	}
}

inline int query(int a,int b){
	if(d[a]<d[b])swap(a,b);
	for(int i=19;i>=0;i--)
		if(d[fa[a][i]]>=d[b])
			a=fa[a][i];
	if(a==b)return a;
	for(int i=19;i>=0;i--)
		if(fa[a][i]!=fa[b][i])
			a=fa[a][i],b=fa[b][i];
	return fa[a][0];
}

int main(){
	n=read();
	m=read();
	s=read();
	for(int i=1,u,v;i<n;i++){
		u=read();v=read();
		build(u,v);
		build(v,u);
	}
	
	d[s]=1;
	dfs(s);
	
	for(int i=1;i<=m;i++){
		int a=read(),b=read();
		printf("%d\n",query(a,b));
	}
	return 0;
}

第39行的int换成void就A了 ???????????? 为啥?

2020/10/29 11:02
加载中...