题目传送门

部落冲突

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


  分析:

  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. [吴恩达机器学习笔记]14降维5-7重建压缩表示/主成分数量选取/PCA应用误区

    14.降维 觉得有用的话,欢迎一起讨论相互学习~Follow Me 14.5重建压缩表示 Reconstruction from Compressed Representation 使用PCA,可以把 ...

  2. IBatisNet+Oracle.ManagedDataAccess打造无需安装oracle客户端和ODP即可连接oracle数据库

    库环境: Oracle.ManagedDataAccess 版本:4.122.1.0 IBatisNet  版本:1.6.2 其实很简单的,只需在驱动配置那里添加上Oracle.ManagedData ...

  3. Spring整合JMS(二)——三种消息监听器(转)

    *注:别人那复制来的 1.3     消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageList ...

  4. BZOJ 2083 vector的巧用+二分

    2083: [Poi2010]Intelligence test Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 469  Solved: 227[Su ...

  5. HDU 3977 斐波那契循环节

    这类型的题目其实没什么意思..知道怎么做后,就有固定套路了..而且感觉这东西要出的很难的话,有这种方法解常数会比较大吧..所以一般最多套一些比较简单的直接可以暴力求循环节的题目了.. /** @Dat ...

  6. 什么是Qt Widget?

    Qt帮助文档如此解释: The user interface contains visual elements that are called widgets in Qt. Examples of w ...

  7. 重构改善既有代码设计--重构手法10:Move Method (搬移函数)

    你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机: ...

  8. 【洛谷 P2472】 [SCOI2007]蜥蜴 (最大流)

    题目链接 简单网络流. 源点向蜥蜴连流量为\(1\)的边. 能跳出去的点向汇点连流量为\(INF\)的边. 把每个点拆成\(2\)个点,\(O(n^4)\)枚举两两点,如果距离小于等于\(d\),就互 ...

  9. 2017ACM暑期多校联合训练 - Team 1 1011 HDU 6043 KazaQ's Socks (找规律)

    题目链接 Problem Description KazaQ wears socks everyday. At the beginning, he has n pairs of socks numbe ...

  10. layui实现类似于bootstrap的模态框功能

    以前习惯了bootstrap的模态框,突然换了layui,想的用layui实现类似于bootstrap的模态框功能. 用到了layui的layer模块,例如: <!DOCTYPE html> ...