题目传送门

部落冲突

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


  分析:

  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. 解决vue路由与锚点冲突

    传统的锚点定位会与vue-router中的路由设置存在冲突,解决方法自定义锚点跳转: html: <ul> <li><a href="" @click ...

  2. 不管谁坐了CIO的位置 都必须了解的法则

    目前一些设立了CIO岗位的央企中,CIO也只做到了“IO”(信息官,Information Officer),而没有做到“C”(首席,Chief).老总们总在抱怨没有合适的人选:懂技术的不懂业务,懂业 ...

  3. CSS 文本属性

    一.文本位置 text-align: 参数 /** * left center right:左中右**/text-align: left; 二.文本行间距 line-height: 参数 特别要注意: ...

  4. 使用 WebSockets 技术的 9 个应用场景

    没有其他技术能够像WebSocket一样提供真正的双向通信,许多web开发者仍然是依赖于ajax的长轮询来实现.对Websocket缺少热情,也许是因为多年前他的安全性的脆弱,抑或者是缺少浏览器的支持 ...

  5. Windows下的MySQL删除data文件夹后……

    MySQL删除data文件夹后,怎么都无法启动了,出现错误: 150106 9:28:43 [Note] Plugin 'FEDERATED' is disabled. wampmysqld: Tab ...

  6. 下拉刷新和UITableView的section headerView冲突的原因分析与解决方案

    UITableView:下拉刷新和上拉加载更多 [转载请注明出处] 本文将说明具有多个section的UITableView在使用下拉刷新机制时会遇到的问题及其解决方案. 工程地址在帖子最下方,只需要 ...

  7. jq消除网页滚动条

    网页有些时候需要能滚动的效果,但是不想要滚动条,我就遇到了这样的需求.自己用jq写了一个垂直滚动条. 纯css也可以实现 .box::-webkit-scrollbar{display:none} 但 ...

  8. html5优分期大学生分期购物商城模板

    链接:http://pan.baidu.com/s/1dEUAzBz 密码:j150

  9. 初识smarty

    个人体会(不完全正确):就是smarty就是为了更好的使得php/html结合做出来的一个框架. ,

  10. JDK1.8新特性

    1.Lambda                                                            Lambda的语法目前仅对于只有一个抽象方法的接口. 在Lamb ...