全WA求助
查看原帖
全WA求助
243024
gdjcwsk楼主2020/6/1 22:01

抱歉我之前一直删帖,但现在我实在找不出什么方法了qwq

#include <bits/stdc++.h>
using namespace std;
const int maxn=1000005;
int nn,heads[maxn],parent[maxn][20],depth[maxn];
struct node
{
    int to,next;
}pool[maxn];
void dfs(int r,int father)
{
    depth[r]=depth[father]+1;
    parent[r][0]=father;
    for(int i=1;i<20;i++)
    {
        parent[r][i]=parent[parent[r][i-1]][i-1];
    }
    for(int i=heads[r];i!=0;i=pool[i].next)
    {
        if(pool[i].to!=father)
        {
            dfs(pool[i].to,r);
        }
    }
}
int lca(int x,int y)
{
    if(depth[x]<depth[y])
    {
        swap(x,y);
    }
    for(int i=19;i>=0;i--)
    {
		if(depth[parent[x][i]]>=depth[y]) 
		{
		    x=parent[x][i];
		}
	}
    if(x==y)
    {
        return x;
    }
    for(int i=19;i>=0;i--)
    {
        if(parent[x][i]!=parent[y][i])
        {
            x=parent[x][i];
            y=parent[y][i];
        }
    }
    return parent[x][0];
}
void addedge(int u,int v)
{
    pool[++nn].to=v;
    pool[nn].next=heads[u];
    heads[u]=nn;
}
inline int qr()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    { 
        if(ch=='-')
        {
            f=-1;
        }
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=(x<<3)+(x<<1)+ch-'0';
        ch=getchar();
    }
    return x*f;
}
bool inpath(int x,int a,int b)
{
    int lca1=lca(a,b);
    if(depth[x]<depth[lca1])
    {
        return false;
    }
    return x==lca(x,a)||x==lca(a,b);
}
int main()
{
    int n=qr(),m=qr();
    for(int i=1;i<=n-1;i++)
    {
        int a=qr(),b=qr();
        addedge(a,b);
        addedge(b,a);
    }
    dfs(1,1);
    for(int i=0;i<m;i++)
    {
        int a=qr(),b=qr(),c=qr(),d=qr();
        int aa=lca(a,b);
        int cc=lca(c,d);
        if(depth[aa]>depth[cc])
        {
            if(inpath(aa,c,d))
            {
                cout<<"Y"<<endl;
            }
            else
            {
                cout<<"N"<<endl;
            }
        }
        else
        {
            if(inpath(cc,a,b))
            {
                cout<<"Y"<<endl;
            }
            else
            {
                cout<<"N"<<endl;
            }
        }
    }
}
2020/6/1 22:01
加载中...