洛谷 4219/BZOJ 4530 大融合
4530: [Bjoi2014]大融合
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 990 Solved: 604
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
A 2 3
A 3 4
A 3 8
A 8 7
A 6 5
Q 3 8
Sample Output
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio> inline void read(int & x)
{
int k = ; x = ;
char c = getchar();
while (!isdigit(c))
if (c == '-') c = getchar(), k = -;
else c = getchar();
while (isdigit(c))
x = (x << ) + (x << ) + (c ^ ),
c = getchar();
x *= k;
} const int N = ;
int n, m, tot, x, y, stk_top;
int faz[N], siz[N], tag[N], son[N][], stk[N], bson[N]; char opt; inline int Root(int u)
{
return son[faz[u]][] != u && son[faz[u]][] != u;
} inline char Getchar(void)
{
opt = getchar();
while (opt == ' ' || opt == '\n')
opt = getchar();
return opt;
} void Swap(int & x, int & y)
{
x ^= y, y ^= x, x ^= y;
} inline int Getson(int u)
{
return son[faz[u]][] == u;
} inline void Pushup(int u)
{
if (!u) return;
siz[u] = siz[son[u][]] + siz[son[u][]] + bson[u] + ;
} inline void Pushdown(int u)
{
if (!tag[u] || !u) return;
tag[son[u][]] ^= ,
tag[son[u][]] ^= ,
Swap(son[u][], son[u][]),
tag[u] = ;
} inline void Rotate(int u)
{
int y = faz[u], z = faz[y], ch = Getson(u), b = son[u][ch ^ ];
Pushdown(y), Pushdown(u);
if (!Root(y)) son[z][Getson(y)] = u;
son[u][ch ^ ] = y, son[y][ch] = b;
faz[u] = z, faz[b] = y, faz[y] = u;
Pushup(y), Pushup(u);
} inline void Splay(int u)
{
int cur = u; stk[stk_top = ] = u;
while (!Root(cur)) stk[++stk_top] = cur = faz[cur];
while (stk_top) Pushdown(stk[stk_top--]);
while (!Root(u))
{
if (!Root(faz[u]))
if (Getson(u) == Getson(faz[u])) Rotate(faz[u]);
else Rotate(u);
Rotate(u);
}
} inline void Access(int u)
{
for (int ch = ; u; u = faz[ch = u])
Splay(u), bson[u] += siz[son[u][]] - siz[ch], son[u][] = ch, Pushup(u);
} inline void Mkrt(int u)
{
Access(u), Splay(u), tag[u] ^= ;
} inline void Split(int a, int b)
{
Mkrt(a), Access(b), Splay(b);
} inline void Link(int a, int b)
{
Mkrt(a), Mkrt(b);
faz[a] = b, bson[b] += siz[a], Pushup(b);
} inline void Get(int a, int b)
{
Mkrt(a), Mkrt(b);
printf("%lld\n", (long long)siz[a] * (siz[b] - siz[a]));
} int main()
{
read(n), read(m);
for (int i = ; i <= n; ++i) siz[i] = ;
for (int i = ; i <= m; ++i)
{
opt = Getchar(), read(x), read(y);
if (opt == 'Q') Get(x, y);
if (opt == 'A') Link(x, y);
}
return ;
}
洛谷 4219/BZOJ 4530 大融合的更多相关文章
- 【洛谷4219】[BJOI2014]大融合(线段树分治)
题目: 洛谷4219 分析: 很明显,查询的是删掉某条边后两端点所在连通块大小的乘积. 有加边和删边,想到LCT.但是我不会用LCT查连通块大小啊.果断弃了 有加边和删边,还跟连通性有关,于是开始yy ...
- bzoj 4530 大融合 —— LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...
- 【洛谷 P4219】 [BJOI2014]大融合(LCT)
题目链接 维护子树信息向来不是\(LCT\)所擅长的,所以我没搞懂qwq 权当背背模板吧.Flash巨佬的blog里面写了虽然我没看懂. #include <cstdio> #define ...
- 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...
- 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓
题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...
- 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑
题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...
- 洛谷 P2046 BZOJ 2007 海拔(NOI2010)
题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...
- 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)
//洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...
- 洛谷 P2056 BZOJ 2743 [HEOI2012]采花
//表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...
随机推荐
- iOS 隐藏百度地图SDK的百度LOGO
第一个思路:找到LOGO对应的UIIMageView,并将其隐藏hidden // 隐藏百度地图Logo UIView *mView = _mapView.subviews.firstObject; ...
- Jmeter (二十六)逻辑控制器 之 Module Controller and Include Controller
Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...
- Eclipse Photon 小技巧(tips)
本文内容: Eclipse 4.8版本 代号 photon 光量子 ,感觉更像ide了,虽然这些技巧广为认知,但是作为eclipse来说,也是很重要的. Code completion allows ...
- 第八届蓝桥杯大赛个人赛决赛(软件类)真题C++
哥德巴赫分解 哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和. 你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行. 实际上,一般一个偶数会有多种不同的分解方案, ...
- 2019湘潭校赛 H(dp)
题目传送 dp是常规的:\(m^2\)的预处理:把位置存进vector然后\(O(1)\)算出想要的:WA点:要注意特意设置一下val[i][v.size()]=0,即全天都放鸽子则花费时间为0. # ...
- QDU-GZS and String
Description GZS has two strings s and t. In each step, GZS can select arbitrary character c of s and ...
- codeforces772C
给一段序列,给你去掉所有数字的顺序,输出每去掉一个数,当前联通的子序列的最大值. 倒着来,每次插入一个数,然后求联通的最大值,线段树每个节点标记一下,区间的左右是否插入了数字,还有如果有数字从左边/右 ...
- Ubuntu 下修改Tomcat和Jetty默认的JDK和初始内存
修改/etc/default/tomcat 或者 /etc/default/jetty 文件 中的 JAVA_HOME 和 JAVA_OPTS
- 开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用
项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...
- Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)
这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战. 第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是 ...