Luogu P3398 仓鼠找sugar

news/2024/6/1 20:39:59

传送门

我居然把swap写成了switch

如果路径相交,那么一定有LCA(a,b)在路径c,d上,或LCA(c,d)在路径a,b上

如果x在路径a,b上,需要满足条件:

dpth[x] >= dpth[LCA(a,b)] 

LCA(a,x)=x 或 LCA(b,x)=x

就这样,求出LCA后分别判断一下即可

代码如下

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#define MogeKo qwq
using namespace std;
const int maxn = 2e5+10;
int n,q,x,y,a,b,c,d,e,f,cnt;
int dpth[maxn],p[maxn][25];
int head[maxn],to[maxn],nxt[maxn];

void add(int x,int y) {
    to[++cnt] = y;
    nxt[cnt] = head[x];
    head[x] = cnt;
}

void dfs(int x,int fa) {
    dpth[x] = dpth[fa]+1;
    p[x][0] = fa;
    for(int i = 1; (1<<i) <= dpth[x]; i++)
        p[x][i] = p[p[x][i-1]][i-1];
    for(int i = head[x]; i; i = nxt[i]) {
        if(dpth[to[i]]) continue;
        if(to[i] == fa) continue;
        dfs(to[i],x);
    }
}

int lca(int a,int b) {
    if(dpth[a] < dpth[b]) swap(a,b);
    for(int i = 20; i >= 0; i--)
        if(dpth[a] - (1<<i) >= dpth[b])
            a = p[a][i];
    if(a == b) return a;
    for(int i = 20; i >= 0; i--)
        if(p[a][i] != p[b][i])
            a = p[a][i],b = p[b][i];
    return p[a][0];
}

bool check(int a,int b,int c,int d) {
    if(dpth[d] >= dpth[c])
        if(lca(a,d)==d || lca(b,d)==d)
            return true;
    return false;
}

int main() {
    scanf("%d%d",&n,&q);
    for(int i = 1; i <= n-1; i++) {
        scanf("%d%d",&x,&y);
        add(x,y),add(y,x);
    }
    dfs(1,-1);
    while(q--) {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        e = lca(a,b);
        f = lca(c,d);
        if(check(a,b,e,f) || check(c,d,f,e))
            printf("Y\n");
        else printf("N\n");
    }
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/mogeko/p/11221187.html


http://www.niftyadmin.cn/n/1647323.html

相关文章

Tomcat7优化方案

用了很久的Tomcat&#xff0c;没怎么看过它的优化&#xff0c;今天抽出时间研究了下&#xff0c;将内容记录下。 首先&#xff0c;是客户端访问tomcat的一个过程&#xff0c;如图所示&#xff1a; 图中间虚线框部分是 Apache基金下的服务器来做静态资源处理的&#xff0c;而这部…

git 工作中常用命令

git 工作中常用命令 git 命令&#xff1a; git init : 初始化 git add . :添加所有文件 git status :查看状态 若果是第一次会提示你输入你的 邮箱 和姓名&#xff1a; git commit -m "这个版本修改过的一些描述" :添加到他和远程 仓库 git log : 查看远…

Tomcat优化详细教程(转载)

Tomcat是我们经常使用的 servlet容器之一&#xff0c;甚至很多线上产品都使用 Tomcat充当服务器。而且优化后的Tomcat性能提升显著&#xff0c;本文从以下几方面进行分析优化。 一、内存优化 默认情况下Tomcat的相关内存配置较低&#xff0c;这对于一些大型项目显然是不够用的&…

flash 右键菜单隐藏与修改

来源&#xff1a;http://blog.sina.com.cn/s/blog_7264c84401014fmd.html import flash.ui.ContextMenu;import flash.ui.ContextMenuItem;import flash.events.ContextMenuEvent;import flash.net.URLRequest; var menu:ContextMenu new ContextMenu();var menuItem:ContextM…

浅谈tomcat优化(内存,并发,缓存,安全,网络,系统等)

一.Tomcat内存优化Tomcat内存优化主要是对 tomcat 启动参数优化&#xff0c;我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数JAVA_OPTS参数说明  -server 启用jdk 的 server 版  -Xms java虚拟机初始化时的最小内存  -Xmx java虚拟机可使用的最大内存 …

Java实现指定文件夹删除

实际使用的时候&#xff0c;在需要调用的地方使用delFolder(“文件夹路径”) delFolder.class public static void delFolder(String folderPath) {try {delAllFile(folderPath); //删除完里面所有内容String filePath folderPath;filePath filePath.toString();java.io.File…

自动化安装SQLSERVER和SQLSERVER补丁 转

您还在用下一步下一步的方式安装SQLSERVER和SQLSERVER补丁吗&#xff1f; 介绍 假如你有50台服务器需要安装SQLSERVER&#xff0c;如果你用下一步下一步的方式&#xff0c;用远程桌面不停切换&#xff0c;那个效率。。。 大家都知道SQLSERVER可以使用静默方式来安装&#xff0c…

1 求长方形的面积和周长

问题描述 : 求一个长方形的面积S及周长P。面积的公式为S a b&#xff0c;周长的公式P2*(ab)&#xff0c;其中a代表长方形的长&#xff0c;b代表长方形的宽。 输入说明 : 你的程序需要从标准输入设备&#xff08;通常为键盘&#xff09;中读入两个整数&#xff1a;一个整数a…