题目传送门

部落冲突

格式难调,体面就不放了。


  分析:

  julao们应该都看得出来就是个$LCT$板子,战争就$cut$,结束就$link$,询问就$find$。没了。。。

  太久没打$LCT$,然后发现自己之前貌似理解得并不透彻,打得还是不熟。。。

  Code:

//It is made by HolseLee on 5th Sep 2018
//Luogu.org P3950
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std; const int N=3e5+;
int n,m,fa[N],ch[N][],sign[N],cnt,q[N],top;
struct War{
int x,y; bool flag;
}a[N]; inline int read()
{
char c=getchar(); int num=; bool flag=false;
while( c<'' || c>'' ) {
if( c=='-' ) flag=false;
c=getchar();
}
while( c>='' && c<='' ) {
num=(num<<)+(num<<)+(c^);
c=getchar();
}
return flag ? -num : num;
} inline void pushdown(int x)
{
if( !sign[x] ) return;
int temp=ch[x][];
sign[ch[x][]=ch[x][]]^=;
sign[ch[x][]=temp]^=;
sign[x]=;
} inline bool isroot(int x)
{
return (ch[fa[x]][]!=x && ch[fa[x]][]!=x);
} inline void rotate(int x)
{
int y=fa[x], z=fa[y];
int k=ch[y][]==x, w=ch[x][k^];
if( !isroot(y) ) ch[z][ch[z][]==y]=x;
ch[x][k^]=y; ch[y][k]=w;
if( w ) fa[w]=y; fa[x]=z; fa[y]=x;
} inline void splay(int x)
{
top=; q[top]=x;
for(int i=x; !isroot(i); i=fa[i])
q[++top]=fa[i];
while( top ) pushdown(q[top--]);
while( !isroot(x) ) {
int y=fa[x], z=fa[y];
if( !isroot(y) ) {
(ch[y][]==x)^(ch[z][]==y) ? rotate(x) : rotate(y);
}
rotate(x);
}
} inline void access(int x)
{
for(int y=; x; y=x,x=fa[x]) {
splay(x); ch[x][]=y;
}
} inline int find(int x)
{
access(x); splay(x);
while( ch[x][] )pushdown(x),x=ch[x][];
splay(x);
return x;
} inline void makeroot(int x)
{
access(x); splay(x); sign[x]^=;
} inline void split(int x,int y)
{
makeroot(x); access(y); splay(y);
} inline void link(int x,int y)
{
makeroot(x);
fa[x]=y;
} inline void cut(int x,int y)
{
split(x,y);
fa[x]=ch[y][]=;
} int main()
{
n=read(); m=read();
char opt[]; int x,y;
for(int i=; i<n; ++i) {
x=read(), y=read();
link(x,y);
}
for(int i=; i<=m; ++i) {
scanf("%s",opt);
if( opt[]=='Q' ) {
x=read(), y=read();
if( find(y)==find(x) ) printf("Yes\n");
else printf("No\n");
} else if( opt[]=='C' ) {
x=read(), y=read();
cut(x,y);
a[++cnt].x=x, a[cnt].y=y;
a[cnt].flag=false;
} else {
x=read();
if( a[x].flag ) continue;
link(a[x].x,a[x].y);
a[x].flag=true;
}
}
return ;
}

洛谷P3950 部落冲突 [LCT]的更多相关文章

  1. 洛谷 P3950 部落冲突 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例1 输出样例1 输入样例2 输出样例2 输入样例3 输出样例3 说明 思路 AC代码 总结 题面 题目链接 P3 ...

  2. 洛谷P3950 部落冲突(LCT)

    洛谷题目传送门 最无脑LCT题解,Dalao们的各种算法都比这个好多啦... 唯一的好处就是只管码代码就好了 开战cut,停战link,询问findroot判连通性 太无脑,应该不用打注释了.常数大就 ...

  3. 【刷题】洛谷 P3950 部落冲突

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  4. 洛谷:P3950 部落冲突

    原题地址:https://www.luogu.org/problemnew/show/P3950 题目简述 给定一棵树,每次给定一个操作,有如下两种: 将某条边染黑 2.询问给定的u,v两点间是否有边 ...

  5. [题解] 洛谷P3950 部落冲突

    传送门 拿到题目,一看 裸LCT (其实是我懒得打,splay又臭又长) 首先,这道题的意思就是删掉一些边 所以常规操作 点权转边权 之后对于战争操作,在对应的边上+1 对于和平操作,在对应的边上-1 ...

  6. [洛谷P3950]部落冲突

    题目大意:给你一棵树,有$3$个操作: $Q\;p\;q:$询问$p,q$是否连通 $C\;p\;q:$把$p->q$这条边割断 $U\;x:$恢复第$x$次操作二 题解:可以在割断时把这条边赋 ...

  7. Cogs 2856. [洛谷U14475]部落冲突

    2856. [洛谷U14475]部落冲突 ★★★   输入文件:lct.in   输出文件:lct.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 在一个叫做Travi ...

  8. 洛谷 U14475 部落冲突 【比赛】 【树链剖分 + 线段树】

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  9. lupgu P3950 部落冲突

    题目链接 luogu P3950 部落冲突 题解 树剖线段树可以 lct还行 代码 #include<cstdio> #include<algorithm> inline in ...

随机推荐

  1. JS事件大全及兼容

    一般事件 事件 浏览器支持 描述 onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick IE4|N4|O 鼠标双击事件 onMouseDown  ...

  2. 816E. Karen and Supermarket 树形DP

    LINK 题意:给出n个商品,除第一个商品外,所有商品可以选择使用优惠券,但要求其前驱商品已被购买,问消费k以下能买几个不同的商品 思路:题意很明显就是树形DP.对于一个商品有三种选择,买且使用优惠券 ...

  3. 优美的代码:do...while(0)

    1.背景 最近再看一个开源代码的时候,看到很多宏经常这么写的: #define XXX do{\ ...\ }) 一眼看到的时候就知道这一份代码执行一次,那么do...while还有什么意义呢?在查阅 ...

  4. SpringCloud(二)注册服务提供者搭建

    上文已经写了如何去搭建注册中心,仅有注册中心是远远不够的,所以我们需要注册到注册中心并提供服务的节点,这里称为注册服务提供者 前提 阅读上文,并成功搭建注册中心,环境无需改变 项目搭建 这里我们需要新 ...

  5. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  6. 记一个logrotate的配置文件权限问题

    问题描述 从git仓库更新了别人配置好的logrotate,发现不能正常运行.手工执行报错 error: Ignoring syslog because of bad file mode - must ...

  7. spring集成swagger

    随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系,变成了API接口:API文档变成了 ...

  8. Hadoop(一):概述

    一.Hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构.Hadoop框架最核心的设计包含两个方面,一是分布式文件系统(Hadoop Distributed File ...

  9. csu 1757(贪心或者树状数组)

    1757: 火车入站 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 209  Solved: 51[Submit][Status][Web Board] ...

  10. Construct Binary Tree from Inorder and Postorder Traversal (&&Preorder and Inorder Traversal )——数据结构和算法的基本问题

    Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume tha ...