[SDOI2008]洞穴勘测【LCT维护联通关系】

2023-11-18

题目链接


  LCT判断两点联通的这样的一个基础问题,因为不存在环,所以直接LCT维护连接关系即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e4 + 7;
int N, M;
namespace LCT
{
    int fa[maxN], c[maxN][2];
    int r[maxN];
    bool isroot(int x) { return c[fa[x]][0] != x && c[fa[x]][1] != x; }
    void pushup(int x)
    {
        
    }
    void pushr(int x) { swap(c[x][0], c[x][1]); r[x] ^= 1; }
    void pushdown(int x)
    {
        if(r[x])
        {
            if(c[x][0]) pushr(c[x][0]);
            if(c[x][1]) pushr(c[x][1]);
            r[x] = 0;
        }
    }
    void Rotate(int x)
    {
        int y = fa[x], z = fa[y], k = c[y][1] == x;
        if(!isroot(y)) c[z][c[z][1] == y] = x;
        fa[x] = z;
        c[y][k] = c[x][k ^ 1];
        fa[c[x][k ^ 1]] = y;
        c[x][k ^ 1] = y;
        fa[y] = x;
        pushup(y);
        pushup(x);
        if(z) pushup(z);
    }
    int Stap[maxN];
    void Splay(int x)
    {
        int y = x, z = 0;
        Stap[++z] = y;
        while(!isroot(y)) Stap[++z] = y = fa[y];
        while(z) pushdown(Stap[z--]);
        while(!isroot(x))
        {
            y = fa[x]; z = fa[y];
            if(!isroot(y)) (c[z][0] == y) ^ (c[y][0] == x) ? Rotate(x) : Rotate(y);
            Rotate(x);
        }
    }
    void Access(int x)
    {
        int y = 0;
        while(x)
        {
            Splay(x);
            c[x][1] = y;
            pushup(x);
            y = x;
            x = fa[x];
        }
    }
    void makeroot(int x)
    {
        Access(x);
        Splay(x);
        pushr(x);
    }
    int findroot(int x)
    {
        Access(x);
        Splay(x);
        while(c[x][0])
        {
            pushdown(x);
            x = c[x][0];
        }
        Splay(x);
        return x;
    }
    void Split(int x, int y)
    {
        makeroot(x);
        Access(y);
        Splay(y);
    }
    void link(int x, int y)
    {
        makeroot(x);
        if(findroot(y) != x)
        {
            fa[x] = y;
        }
    }
    void cut(int x, int y)
    {
        makeroot(x);
        if(findroot(y) != x || fa[y] != x || c[y][0]) return;
        fa[y] = c[x][1] = 0;
        pushup(x);
    }
};
using namespace LCT;
int main()
{
    scanf("%d%d", &N, &M);
    char ch[10]; int u, v;
    while(M--)
    {
        scanf("%s%d%d", ch, &u, &v);
        switch (ch[0])
        {
            case 'Q':
            {
                if(findroot(u) == findroot(v)) printf("Yes\n");
                else printf("No\n");
                break;
            }
            case 'C':
            {
                link(u, v);
                break;
            }
            default:
            {
                cut(u, v);
                break;
            }
        }
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[SDOI2008]洞穴勘测【LCT维护联通关系】 的相关文章

  • 打印1-100中3的倍数 (C语言)

    代码 include
  • MySQL安装时出现无法正常启动的问题

    我刚在官网下载了MySQL8 0 18的最新压缩包版本 跟着网络上的安装教程走 发现在cmd窗口用net start mysql命令无法正常启动 在查看my ini文件和环境变量配置没有问题之后 重新以管理员身份打开cmd窗口 仍然失败 百
  • LeetCode 2011. 执行操作后的变量值

    存在一种仅支持 4 种操作和 1 个变量 X 的编程语言 X 和 X 使变量 X 的值 加 1 X 和 X 使变量 X 的值 减 1 最初 X 的值是 0 给你一个字符串数组 operations 这是由操作组成的一个列表 返回执行所有操作
  • python--socket(套接字/插口)

    socket是什么 是进程间通信的一种方式 它与其他进程间通信的一个主要不同是 它能实现不同主机之间的进程通信 我们网络上各种各样的服务大多都是基于socket来完成通信的 例如我们浏览网页 qq聊天 收发emil Socket是应用层与T
  • 民营经济挑战未来发展

    上周末 一场 中国民营经济六十年研讨会 在北京聚集了改革领域的多位高官和专家 曲折和成就 经验和教训 理论问题和现实问题 都在会议上碰撞 此次会议由中央社会主义学院 中国经济体制改革研究会 中国民 私 营经济研究会 北京开达经济学家咨询中心
  • 创建git项目并提交

    1 创建仓库 2 点击创建 3复制gitee码云的HttpS连接 4 提交上传 打开项目并点击菜单栏上的 CVS Import into version control Create Git Repository 创建本地仓库 在打开的 C
  • 小米笔记本Pro安装Win+Mac双系统,时间同步不一致问题!

    安装win和Mac 双系统 时间同步不一样的问题 可以通过补丁解决 Win注册表CMD注入或Mac下安装注入 二选一打补丁 1 Win下操作以管理员运行CMD命令行Reg add HKLM SYSTEM CurrentControlSet
  • 基于时空网络的出租车OD需求预测-简介

    最近单曲循环的一首歌 分享给大家 1 文章信息 Contextualized Spatial Temporal Network for Taxi rigin Destination Demand Prediction 2019发在IEEE
  • RecyclerView应用复习

    导包 implementation androidx recyclerview recyclerview 1 1 0 recyclerview implementation com zhy base rvadapter 3 0 3 adap
  • AttributeError: module ‘torch.cuda.amp‘ has no attribute ‘autocast‘

    参考 https zhuanlan zhihu com p 165152789 https zhuanlan zhihu com p 176998729 https pytorch org docs stable amp html http
  • 渠道系统和 OA系统待办事项接口

    OA待办 已办 以及通过ltpatoken查找用户拼音接口 接口采用http get方式 将需要的参数传入 Content Type application json charset UTF 8 getMethod addRequestHe

随机推荐

  • 错误: 无法从静态上下文中引用非静态 变量 this

    JAVA菜鸟笔记 错误 无法从静态上下文中引用非静态 变量 this 1 09 17 Hello java 错误 无法从静态上下文中引用非静态 变量 this 错误原因 main方法是一个静态方法 而静态方法中无法引用非静态变量 因为静态方
  • STC单片机 延时 那点事,DS18B20的苦

    DS18B20采用 一线总线 对时序的要求是特高啊 要想精准延时 有两个选择 其一当属定时器 其二用汇编一条一条的来算 但 DS18B20延时的时候 以上两条都不会选 还有其他选择 第三方的Delay函数 比如STC ISP VXX X提供
  • 惊艳的时间轮定时器

    问题引入 游戏里面每个Player身上有很多buffs 在每一个tick 最小时间段 都要去检查buff里面的每一个buff是不是过期 产生的效果如何 造成在每个tick里面都去遍历一个长list 明显很不好 怎么优化 1 原始模型 buf
  • c++智能指针

    C 智能指针详解 C 有四个智能指针 auto ptr unique ptr shared ptr weak ptr 其中后三个是C 11支持 第一个已经被C 11弃用 智能指针介绍 智能指针主要用于管理在堆上分配的内存 它将普通的指针封装
  • IP子网划分

    一 子网划分基础 需要掌握二进制与十进制之间的熟练转化 第一篇已经详细介绍过 二 IP地址组成及其分类 目前的IP地址是 IPv4 地址 1 IP地址有两部分组成 网络号码字段 net id 用于区分不同网络 主机号码字段 host id
  • HarmonyOS基础答疑

    本帖收录 HarmonyOS开发者交流群 常见的问题答疑 另外有相关问题可以补充到本帖 Q1 如何获取DevEco Studio 2 0 版本计划 获取方式 答 现在起 可在HarmonyOS官网上 下载HarmonyOS应用开发IDE D
  • 如何让PowerShell显示中文不乱码

    如今软件日益国际化的今天 Windows下的命令行却还顽固地使用本地编码来显示数据 这导致用UTF 8编码的文件在命令行显示乱码 虽说Cygwin的内核cygwin1 dll有自动转换功能 可是因为GB2312中没有变音符号等特殊字符 某些
  • CGI的基本定义和优劣势是什么

    通用网关接口 CGI 是网络服务器之间的交集 通过它可以在外部应用程序和服务器之间进行标准化数据交换 它属于现存最古老的在线界面技术 至今仍被一些知名虚拟主机提供商使用 使用CGI 时 HTML页面不需要存储在服务器上 而是可以在用户进行网
  • 总结几个C语言小程序

    一 打印正方形 该程序通过用户输入一个正方形的边长 L 然后利用嵌套的 for 循环来打印出具有边框的正方形图案 程序如下 include
  • mybatis xml文件中statementType类型

    xml文件示例如下
  • 根目录扩容(SUSE系列,版本1)

    LVM 方式 需求 给根目录和 oradata目录扩容 背景 1 可用闲置盘400G 2 web应用和数据库部在同台机器 3 应用所用目录为根目录 数据库用 oradata目录 4 计划给根100G oradata 300G磁盘大小 步骤
  • 那些好用过头的键盘

    目录 一 好键盘的重要性 二 关于keychron机械键盘 1 轴体部分 1 1 红轴 1 2 青轴 1 3 茶轴 1 4 黑轴 1 5 其他轴 2 性价比 2 1 外观 2 2 连接方式 2 3 轴体 2 4 摔打性 2 5 价格 三 总
  • 稿费一般多少钱一千字_写一篇1000字的稿子多少钱?一般

    目录 1 关于稿子代写 一般稿子分三种类型 第一种 原创稿子 第二种 转发稿子 第三种 书评稿子 这些都是主分类 当前每个主分类肯定会包含很多的子分类 如 翻译稿子 新闻稿子 演讲稿子 会议稿子 等等 当然稿子是有规定的书写格式 并不是随便
  • 使用cs与msf进行内网横向移动

    使用cs与msf进行内网横向移动 目标系统为 192 168 1 123 跳板主机为 192 168 1 118 一 使用cs探测内网 1 将目标上线至CS 2 使用cs探测内网信息 查看当前目标系统网络情况 确认目标系统所在内网网段 3
  • 王者荣耀战力查询的保姆级教程

    王者荣耀段位水平是可以直接看到的 但是荣耀战力才是衡量玩家实力的标准 因为各种排行榜 甚至是职业选手选拔也是看这个荣耀战力的 战力系统可以决定玩家所在区域的排名 并发放牌子 这也是是想展示的一种 那有些玩家所在区域玩家较多 那竞争自然而然地
  • 浅谈自然语言处理(NLP)学习路线(一)--- 概述

    资料汇总 引流 大道至简之机器学习系列 流畅的python https pan baidu com s 1l5Tl0yZS0NTixAilH9S2aQ 提取码 38qa 统计学习方法第二版 https pan baidu com s 18p
  • 一个不错的选色网站

    http 0to255 com 转载于 https www cnblogs com sofire archive 2010 10 12 1849141 html
  • Kali-加密文档Office破解-hashcat(字典)

    利用office2john py 导出word的hash值 office2john py YD xls gt hash txt 修改hash内容 cat hash txt gedit hash txt 破解 m 哈希值类型 hashcat
  • 狂神Redis学习笔记(已更完)

    Nosql概述 一 缓存的发展历史 1 MySQL单机时代 90年代 当时一个基本的网站访问量一般不会太大 单个数据库完全够用了 那个时候 更多使用静态网页html 服务器根本没有太大的压力 这种情况下 整个网站的瓶颈是什么 数据量如果太大
  • [SDOI2008]洞穴勘测【LCT维护联通关系】

    题目链接 LCT判断两点联通的这样的一个基础问题 因为不存在环 所以直接LCT维护连接关系即可 include