本地数据(包括测试点一)都OK的,但是评测全WA
查看原帖
本地数据(包括测试点一)都OK的,但是评测全WA
105759
IL杰佣楼主2020/7/22 11:42
#include <bits/stdc++.h>
using namespace std;
int cnt,f[500050][50],head[500050],d[500050],vis[500050];
float lg;
struct edge
{
	int to;
	int nex;
}e[50000100];
inline void add(int a,int b)
{
	++cnt;
	e[cnt].to=b;
	e[cnt].nex=head[a];
	head[a]=cnt;
}
inline void dfs(int u,int fa)
{
	d[u]=d[fa]+1;
    f[u][0]=fa;
    for(register int i=1;i<=lg;i++)
    f[u][i]=f[f[u][i-1]][i-1];
    for(register int i=head[u];i;i=e[i].nex)
    {
        int v=e[i].to;
        if(v!=fa)
        dfs(v,u);
    }
}
inline int l(int x,int y)
{
	if(d[x]>d[y])  swap(x,y);
	for(register int i=lg;i>=0;i--)
  	  if(d[x]<=d[y]-(1<<i))
  		  y=f[y][i];
    if(x==y)
    return x;
    for(register int i=lg;i>=0;i--)
    {
        if(f[x][i]==f[y][i])
        continue;
        else
        {
        	x=f[x][i];
			y=f[y][i];
		}
    }
    return f[x][0];
}
//int dis(int x,int y)
//{
//    int ccc=l(x,y);
//    return d[x]-d[ccc]+d[y]-d[ccc];
//}
int main()
{
	int m,n,q,s,e,a1,b1,c1,d1,f1,f2,root;
	cin>>n>>m;
	for(int i=1;i<=n-1;i++)
	{
		cin>>s>>e;
		add(s,e);
		add(e,s);
		vis[i]=true;
	}
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==false)
		{
			root=i;
			break;
		}
	}
	dfs(root,0);
	for(int op=1;op<=m;op++)
	{
		cin>>a1>>b1>>c1>>d1;
		f1=l(a1,b1);
		f2=l(c1,d1);
		if(f1==f2)
		{
			cout<<"Y"<<endl;
			continue;
		}
		if(dis(a1,b1)+dis(c1,d1)>=dis(a1,c1)+dis(b1,d1))
			cout<<"Y"<<endl;
		else
			cout<<"N"<<endl;
	}
	return 0;
}
2020/7/22 11:42
加载中...