洛谷 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 种颜色(用整数 ...
随机推荐
- [题解](同余)POJ_3696_The Luckiest Number
还是挺难的吧......勉强看懂调了半天 首先表达式可以写成 8(10^x -1)/9,题意为求一个最小的x使L | 8(10^x -1)/9 设d=gcd(L,8) L | 8(10^x -1)/9 ...
- ssrf漏洞分析
ssrf漏洞分析 关于ssrf 首先简单的说一下我理解的ssrf,大概就是服务器会响应用户的url请求,但是没有做好过滤和限制,导致可以攻击内网. ssrf常见漏洞代码 首先有三个常见的容易造成ssr ...
- java中读取配置文件内容,如读取.properties文件
http://blog.csdn.net/u012255097/article/details/53122760
- myeclipse 最佳设置
http://www.cnblogs.com/wuyifu/p/3593035.html
- windows无法启动redis服务,错误码1067
https://blog.csdn.net/kissdead0xzy/article/details/84332870
- 《从0到1学习Flink》—— 如何自定义 Data Sink ?
前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...
- Typora--Draw Diagrams With Markdown
Typora Typora supports some Markdown extension for diagrams, you could enable this feature from pref ...
- Mysql 函数创建
DELIMITER $$DROP FUNCTION IF EXISTS `shouy`.`Sel_FUNC_GOODS_type` $$ CREATE FUNCTION `shouy`.`Sel_FU ...
- .net程序员业余Android开发赚点外快(介绍一下自己的经验)
记得是11年10月份开始研究android的,当时还不会java,听说android比较火,自己也买了个垃圾android机,平时工作也不是特别忙,于是我就突发奇想,想试试做一下android应用可不 ...
- CF1166C A Tale of Two Lands
思路: 搞了半天发现和绝对值无关. http://codeforces.com/blog/entry/67081 实现: #include <bits/stdc++.h> using na ...