4530: [Bjoi2014]大融合

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 990  Solved: 604
[Submit][Status][Discuss]

Description

小强要在N个孤立的星球上建立起一套通信系统。这套通信系统就是连接N个点的一个树。
这个树的边是一条一条添加上去的。在某个时刻,一条边的负载就是它所在的当前能够
联通的树上路过它的简单路径的数量。
例如,在上图中,现在一共有了5条边。其中,(3,8)这条边的负载是6,因
为有六条简单路径2-3-8,2-3-8-7,3-8,3-8-7,4-3-8,4-3-8-7路过了(3,8)。
现在,你的任务就是随着边的添加,动态的回答小强对于某些边的负载的
询问。

Input

第一行包含两个整数N,Q,表示星球的数量和操作的数量。星球从1开始编号。
接下来的Q行,每行是如下两种格式之一:
A x y 表示在x和y之间连一条边。保证之前x和y是不联通的。
Q x y 表示询问(x,y)这条边上的负载。保证x和y之间有一条边。
1≤N,Q≤100000

Output

对每个查询操作,输出被查询的边的负载。

Sample Input

8 6
A 2 3
A 3 4
A 3 8
A 8 7
A 6 5
Q 3 8

Sample Output

6
 
题解
LCT维护子树信息。
 #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 大融合的更多相关文章

  1. 【洛谷4219】[BJOI2014]大融合(线段树分治)

    题目: 洛谷4219 分析: 很明显,查询的是删掉某条边后两端点所在连通块大小的乘积. 有加边和删边,想到LCT.但是我不会用LCT查连通块大小啊.果断弃了 有加边和删边,还跟连通性有关,于是开始yy ...

  2. bzoj 4530 大融合 —— LCT维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...

  3. 【洛谷 P4219】 [BJOI2014]大融合(LCT)

    题目链接 维护子树信息向来不是\(LCT\)所擅长的,所以我没搞懂qwq 权当背背模板吧.Flash巨佬的blog里面写了虽然我没看懂. #include <cstdio> #define ...

  4. 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  5. 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓

    题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...

  6. 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑

    题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...

  7. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...

  8. 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

    //洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...

  9. 洛谷 P2056 BZOJ 2743 [HEOI2012]采花

    //表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...

随机推荐

  1. $SCOJ4427 Miss Zhao's Graph$

    \(problem\) 给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增. 图中可能有重边和自环. \(题意非常简单:n个点 m个带权边 最多能连成多少条边\) ...

  2. snipaste截图软件

  3. PKUSC 2018 题解

    PKUSC 2018 题解 Day 1 T1 真实排名 Link Solution 考虑对于每一个人单独算 每一个人有两种情况,翻倍和不翻倍,他的名次不变等价于大于等于他的人数不变 设当前考虑的人的成 ...

  4. BZOJ 4551: [Tjoi2016&Heoi2016]树 并查集(&&图论?)

    反向操作,先把所有的标记都打上(记得统计标记的数目),然后依次撤销,合并到自己的上一个点pre,即fa[u]=getf(pre[u]) #include<cstdio> #include& ...

  5. mysql 无法启动 unkown command

    1. https://serverfault.com/questions/490656/mysql-not-starting-error-usr-sbin-mysqld-unknown-option- ...

  6. C#远程连接sqlserver时,尝试读取或写入受保护的内存

    管理员身份运行 cmd ->  输入 netsh winsock reset

  7. 常用的 HTML 头部标签

    曾几何时,我们已经不再手写 HTML 标签.Emmet.Markdown 等工具让我们「健步如飞」,但是我们真的了解这些标签了吗? 基本标签 使用 HTML5 doctype,不区分大小写. < ...

  8. jquery中使用each遍历。

    一直知道each这个方法,但是就是不太明白到底怎么用,今天两个地方都使用了each.真的太高兴了,太有成就感了. 东钿微信平台订单列表页 全部订单之前是按照产调,评估,借款的顺序依次排下来,华总说要按 ...

  9. Linux下软件安装的四种方式

    一.源码安装 步骤: 下载,解压源码(常见的源码打包格式:.tar.gz/.tar.bz2); 可以直接下载源码再上传至linux服务器,或者在联网状态下,直接通过wget等命令获取源码安装包;源码解 ...

  10. pytest+allure2+jenkins环境部署

    1.pycharm安装allure-pytest 2.jenkins -> 系统管理 -> 插件管理 -> 可选插件中过滤Allure,勾选对应插件安装 如下图:  3.安装完插件后 ...