在此为LCT开一个永久的坑

其实我连splay都还不怎么会。

今天先抄了黄学长的bzoj2049,以后一定要把它理解了。

写LCT怎么能不%数据结构大神yeweining呢?%%%chrysanthemums  %%%切掉大森林的全ZJ唯一一人

#include<cstdio>
#include<algorithm>
#define N 1000005
using namespace std;
int n,m;
int fa[10005],c[10005][2],f[10005][2],st[10005];bool rev[10005];
inline bool isroot(int x)
{
    return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;
}
void push_down(int k)
{
    int l=c[k][0],r=c[k][1];
    if(rev[k])
    {
      rev[k]^=1;rev[l]^=1;rev[r]^=1;
      swap(c[k][0],c[k][1]);
    }
}
void rotate(int x)
{
   int y=fa[x],z=fa[y],l,r;
   if(c[y][0]==x)l=0;else l=1;
   r=l^1;
   if(isroot(y)==0)
   {
       if(c[z][0]==y)c[z][0]=x;else c[z][1]=x;
   }
   fa[x]=z;fa[y]=x;fa[c[x][r]]=y;
   c[y][l]=c[x][r];c[x][r]=y;
}
void splay(int x)
{
   int top=0;st[++top]=x;
   for(int i=x;!isroot(i);i=fa[i])
   {
     st[++top]=fa[i];
   }
   for(int i=top;i;i--)push_down(st[i]);
   while(!isroot(x))
   {
      int y=fa[x],z=fa[y];
      if(!isroot(y))
      {
         if(c[y][0]==x^c[z][0]==y)rotate(x);
         else rotate(y);
      }
      rotate(x);
   }
}
void access(int x)
{
  int t=0;
  while(x)
  {
     splay(x);c[x][1]=t;t=x;x=fa[x];
  }
}
void rever(int x)
{
    access(x);splay(x);rev[x]^=1;
}
void link(int x,int y)
{
    rever(x);fa[x]=y;splay(x);
}
void cut(int x,int y)
{
    rever(x);access(y);splay(y);c[y][0]=fa[x]=0;
}
int find(int x)
{
    access(x);splay(x);int y=x;
    while(c[y][0])y=c[y][0];
    return y;
}
int main()
{
    char s[10];
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%s",s);int x,y;
        scanf("%d%d",&x,&y);
        if(s[0]==‘C‘)link(x,y);
        else if(s[0]==‘D‘)cut(x,y);
        else
        {
            if(find(x)==find(y))printf("Yes\n");else printf("No\n");
        }
    }
 } 

洞穴勘测

http://wenku.baidu.com/link?url=x6FCcjtWt-mcj9-do9MFL7lsXB4o2G1T0aG3p-XFYkuNyLKW0Kg-o-u_DUWnI_L_yIVJfHcrE_ThkrfoBlmWqJM-TburN1KlZO9wOvKJmA3

---------这是一篇很详尽的讲稿

时间: 2024-12-10 23:25:02

在此为LCT开一个永久的坑的相关文章

Selenium如何在浏览器新开一个Tab

实现如何在浏览器中新开一个tab,并输入url. import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.Keys; WebElement element = null; String url="http://www.baidu.com"; try { element = d

准备开一个地图SDK的开源项目

最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲染引擎tangram-es进行二次开发, 使用Qt5.7进行二次封装, 提供QWidget和QML两种接口 项目地址: https://github.com/tiangles/ltdmap 支持平台: linux gcc 32/64 bits, arm/x86, 未来打算移植到QNX和win32,

游戏只开一个服务器

这点对于一个游戏的完整性(这个说法大概有些不能表达我的意思?)来讲,可能比较重要. 玩家也是游戏中很重要的资源,分散到多个服务器就是分散了游戏的资源.特别的,如果是一个mud类的游戏,玩家的存在会影响世界的格局,足够多的玩家才能让游戏达到更真实的世界,才不会被个别突出的玩家太多的决定世界的进程,当然,希特勒一般的牛人出现,那是谁也不能阻挡的,那时候也只能接受了. 只开一个服务器,会有两点阻力: 1 运营洗服盈利的需要——当游戏本身不行的时候,这就是救命的稻草. 2 服务器负载的限制——技术上的问

BeginInvoke 方法真的是新开一个线程进行异步调用吗?

转自原文BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void treeinvoke(); private void UpdateTreeView() { MessageBox.Show(System.Threading.Thread.CurrentThread.Name); } private void button1_Click(object sender, System.EventArgs e) { System.Threa

java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?

首先,服务器的实现不止有这两种方式. 先谈谈题主说的这两种服务器模型: 1.收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,不会处理下一个请求.一般的服务器不会使用这种方式实现. 2.收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞 首先纠正一个错误,这并不是非阻塞,它也是阻塞的.相对第一个模型来说,它解决了主线程阻塞的问题,有了一定程度的并发量,但是在每个新开的线程中还是阻塞的.如果100

云服务器以及linux操作系统打开防火墙,在墙上开一个小口

在服务器运行时,需要在某个端口上开一个小口,以供外部访问 执行命令/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 8080为端口号,需要开的小口的端口号 保存: /etc/rc.d/init.d/iptables save 原文地址:https://www.cnblogs.com/blogofbin/p/11656354.html

为nologin用户开一个terminal

昨天,我在设置zabbix-agent的时候,发现agent机器上的zabbix用户并不能读取某文件信息.我就想跳到zabbix用户,后来失败,发现在/etc/passwd中,zabbix被设置为 zabbix:x:800:799:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin 无法使用此用户登录. ? 故,如果要跳转到此用户,我们需要: sudo -u zabbix bash 来为其开一个terminal. 而之后,我通过各层目录的

qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss)

1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要    毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户端换肤功能,所以就对qt的qrc做了点儿研究,我是一个实干派(可能有点儿虚),相对于看文档来说.本文开头我就给出了两篇博客,这两篇博客对我理解qrc这个东西有很大的帮助,接下来我就简单分析下我的理解. 首先说明下qrc是qt的东西,而不属于vs,这也很容易证明,那就是vs的工程师不识别qrc文件的,

JAVA基础----应用程序中如何新开一个线程

通过继承Thread新开线程 将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例.例如,计算大于某一规定值的质数的线程可以写成: class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger t