码迷,mamicode.com
首页 > 其他好文 > 详细

在此为LCT开一个永久的坑

时间:2016-07-23 11:48:29      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

其实我连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

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

在此为LCT开一个永久的坑

标签:

原文地址:http://www.cnblogs.com/wxxlouisa/p/5697952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!