洛谷P3950 部落冲突 [LCT]
部落冲突
格式难调,体面就不放了。
分析:
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]的更多相关文章
- 洛谷 P3950 部落冲突 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例1 输出样例1 输入样例2 输出样例2 输入样例3 输出样例3 说明 思路 AC代码 总结 题面 题目链接 P3 ...
- 洛谷P3950 部落冲突(LCT)
洛谷题目传送门 最无脑LCT题解,Dalao们的各种算法都比这个好多啦... 唯一的好处就是只管码代码就好了 开战cut,停战link,询问findroot判连通性 太无脑,应该不用打注释了.常数大就 ...
- 【刷题】洛谷 P3950 部落冲突
题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...
- 洛谷:P3950 部落冲突
原题地址:https://www.luogu.org/problemnew/show/P3950 题目简述 给定一棵树,每次给定一个操作,有如下两种: 将某条边染黑 2.询问给定的u,v两点间是否有边 ...
- [题解] 洛谷P3950 部落冲突
传送门 拿到题目,一看 裸LCT (其实是我懒得打,splay又臭又长) 首先,这道题的意思就是删掉一些边 所以常规操作 点权转边权 之后对于战争操作,在对应的边上+1 对于和平操作,在对应的边上-1 ...
- [洛谷P3950]部落冲突
题目大意:给你一棵树,有$3$个操作: $Q\;p\;q:$询问$p,q$是否连通 $C\;p\;q:$把$p->q$这条边割断 $U\;x:$恢复第$x$次操作二 题解:可以在割断时把这条边赋 ...
- Cogs 2856. [洛谷U14475]部落冲突
2856. [洛谷U14475]部落冲突 ★★★ 输入文件:lct.in 输出文件:lct.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 在一个叫做Travi ...
- 洛谷 U14475 部落冲突 【比赛】 【树链剖分 + 线段树】
题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...
- lupgu P3950 部落冲突
题目链接 luogu P3950 部落冲突 题解 树剖线段树可以 lct还行 代码 #include<cstdio> #include<algorithm> inline in ...
随机推荐
- 「七天自制PHP框架」应用:JSON生成器
刚刚开始学做一个WebAPP,数据查询的一般套路是通过一张PHP页面读取数据库,获得列表后“嵌写”在PHP页面中,虽然写法上丑陋至极,但也有“快糙猛”出效果的成就感,如图. 后来想想,不对啊,难道以后 ...
- .Net各版本新特性
序言 C# 1.0 (2002) public interface IDateProvider { DateTime GetDate(); } 隐式接口实现 public class DefaultD ...
- 【CodeForces】913 E. Logical Expression
[题目]E. Logical Expression [题意]令x=11110000(2),y=11001100(2),z=10101010(2),n次询问,每次要求用[与][或][非][括号]构成含至 ...
- AngularJs几种服务区别
下面说说这几种函数之间的区别: 函数 定义 适合场景 provider(name, Object OR constructor() ) 一个可配置的.有复杂逻辑的服务.如果你传递了一个对象,那么它应该 ...
- 在Unity中实现屏幕空间反射Screen Space Reflection(4)
第四部分讲一下如何在2D屏幕空间步进光线. http://casual-effects.blogspot.com/2014/08/screen-space-ray-tracing.html 中的代码感 ...
- CentOS测网速
当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为"最后一公里")的网络连接速度.在可用于测试宽带速度的网站中,Speedtest.net也许是使用最 ...
- 安全测试===dos攻击和ddos攻击
Dos攻击: dos攻击是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务 DoS攻击是指故意的攻击网络协议实现的缺 ...
- 135.Candy---贪心
题目链接 题目大意:分糖果,每个小朋友都有一个ratings值,且每个小朋友至少都要有一个糖果,而且每个小朋友的ratings值如果比左右邻舍的小朋友的ratings值高,则其糖果数量也比邻舍的小朋友 ...
- freemarker模板引擎的使用
freemarker是一套前端模板引擎,在使用时,要先在web项目中添加freemarker.jar的依赖. 我在这里主要演示spring-mvc整合freemarker模板引擎.项目案例的文件包结构 ...
- Windows 和Linux 误删除后的恢复
ext文件系统上删除文件,可以恢复:extundelete; windows 恢复删除文件: final data v2.0汉化版 和 easyrecovery