题目

传送门:QWQ

分析

  看起来就是一个支持link的东西。

  但有环,考虑缩点......

  但疯狂Tle。大概是常数卡不过去。

  行走的大常数noble_

代码

#include <bits/stdc++.h>
#define lc son[x][0]
#define rc son[x][1]
using namespace std;
const int maxn=;
int son[maxn][],s[maxn],v[maxn],lazy[maxn],fa[maxn],st[maxn],dig[];
int pa[maxn], belong[maxn], a[maxn];
inline int findset(int x){if(belong[x]==x) return x;else return belong[x]=findset(belong[x]);}
inline int find(int x){if(pa[x]==x) return x;else return pa[x]=find(pa[x]);}
inline int ws(int x){return son[findset(fa[x])][]==x;}
inline int isroot(int x){int f=findset(fa[x]);return !(son[f][]==x||son[f][]==x);}
inline int rev(int x){lazy[x]^=; swap(lc,rc);}
inline void pushdown(int x){
if(!lazy[x]) return;
if(lc) rev(lc); if(rc) rev(rc); lazy[x]=;
}
inline void update(int x){ s[x]=s[lc]+s[rc]+v[x]; }
inline void rot(int x){
int f=fa[x], ff=fa[f],w1=ws(x),w2=ws(fa[x]),xx=son[x][!w1];
if(!isroot(f))son[ff][w2]=x;son[x][!w1]=f;son[f][w1]=xx;
if(xx)fa[xx]=f;fa[f]=x;fa[x]=ff;
update(f);update(x);
}
inline void splay(int x){
int y=x,z=; st[++z]=y; pushdown(x);
while(!isroot(y)) st[++z]=y=findset(fa[y]);
while(z) pushdown(st[z--]),fa[st[z]]=findset(fa[st[z]]);
for(;!isroot(x);rot(x))
if(ws(x)==ws(fa[x])&&!isroot(fa[x])) rot(fa[x]);
update(x);
}
inline void access(int x){
for(int y=;x;x=findset(fa[y=x])){
splay(x); rc=y; if(y) fa[y]=x; update(x);
}
}
inline void makeroot(int x){
access(x); splay(x); rev(x);
}
inline int findroot(int x){
access(x); splay(x);
while(lc) pushdown(x),x=lc;
return x;
}
inline void link(int x,int y){
makeroot(x);
if(findroot(y)==x) return;
fa[x]=y;
}
inline void merge(int x,int y){
if(!x) return;
belong[findset(x)]=findset(y); pushdown(x);
if(x!=y) v[y]+=v[x];
if(lc) merge(lc,y); if(rc) merge(rc,y);
// puts("**********************");
lc=rc=;
}
inline int in(){
char c=getchar();
for (;c>''||c<'';c=getchar());
int num=;
for (;c>=''&&c<='';c=getchar())
num=num*+c-'';
return num;
}
inline void write(int x)
{
if (!x)
{
putchar('');
putchar('\n');
return;
}
dig[]=;
while (x)
{
dig[++dig[]]=x%;
x/=;
}
for (int i=dig[];i>=;--i) putchar(dig[i]+'');
putchar('\n');
}
int main(){
int n,m; n=in();m=in();
for(register int i= ;i<=n;++i) v[i]=in(),pa[i]=belong[i]=i,a[i]=v[i];
int p,x,y;
while(m--){
p=in();x=in();y=in();
if(p==){
x=findset(x);y=findset(y);
if(x==y) continue;
int r1=find(x), r2=find(y);
if(r1!=r2){
pa[r2]=r1;
link(x,y);
}
else{
makeroot(x); access(y); splay(y);
merge(y,y); update(y);
}
}
if(p==){
int xx=x;
x=findset(x);
access(x); splay(x); v[x]+=y-a[xx]; a[xx]=y;
update(x);
}
if(p==){
x=findset(x); y=findset(y);
if(find(x)!=find(y) ){
write(-); continue;
}
makeroot(x); access(y); splay(y);
write(s[y]);
}
}
return ;
}

【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)的更多相关文章

  1. BZOJ 2959: 长跑 [lct 双连通分量 并查集]

    2959: 长跑 题意:字词加入边,修改点权,询问两点间走一条路径的最大点权和.不一定是树 不是树

  2. BZOJ 2959 长跑 (LCT、并查集)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2959 题解 真是被这题搞得心态大崩--调了7个小时--然而并查集都能写成\(O(n^2) ...

  3. BZOJ 2959 长跑 (LCT+并查集)

    题面:BZOJ传送门 当成有向边做的发现过不去样例,改成无向边就忘了原来的思路.. 因为成环的点一定都能取到,我们把它们压成一个新点,权值为环上所有点的权值和 这样保证了图是一颗森林 每次询问转化为, ...

  4. BZOJ 2959: 长跑 lct 双联通分量 并查集 splay

    http://www.lydsy.com/JudgeOnline/problem.php?id=2959 用两个并查集维护双联通分量的编号和合并. #include<iostream> # ...

  5. (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)

    莫比乌斯反演也是反演定理的一种 既然我们已经学了二项式反演定理 那莫比乌斯反演定理与二项式反演定理一样,不求甚解,只求会用 莫比乌斯反演长下面这个样子(=・ω・=) d|n,表示n能够整除d,也就是d ...

  6. (暂时弃坑)ACM数论之旅15---置换群与Polya定理(我把标题看成poi了,poipoipoi(*≧▽≦)ツ)

    (挖坑...) ////////////////////////////////////////////////// 暂时弃坑 开学了,有空再写....

  7. BZOJ 2959: 长跑 解题报告

    2959: 长跑 Description 某校开展了同学们喜闻乐见的阳光长跑活动.为了能"为祖国健康工作五十年",同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑 ...

  8. bzoj 2959 长跑(LCT+BCC+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2959 [题意] n个点,提供操作:连边,修改点权,查询自定义边的方向后起点a终点b能经 ...

  9. bzoj 2959: 长跑【LCT+并查集】

    如果没有环的话直接LCT 考虑有环怎么办,如果是静态的话就tarjan了,但是这里要动态的缩环 具体是link操作的时候看一下是否成环(两点已联通),成环的话就用并查集把这条链缩到一个点,把权值加给祖 ...

随机推荐

  1. IIS站点/虚拟目录中访问共享目录(UNC)以及建立后的应用程序的信任级别问题

      UNC是 Universal Naming Convention 的简称,也叫通用命名规范.通用命名约定.网络(范指局域网)上资源的完整位置名称.格式为 \\servername\sharenam ...

  2. React-Native基础_5.列表视图ListView

    列表视图ListView 用来显示垂直滚动列表,需要指定两个东西,1 数据的来源 dataSource,2 渲染列表的条目布局 rendRow 'use strict' import React, { ...

  3. wordpress 生成自定义 meta box

    工具 https://jeremyhixon.com/tool/wordpress-meta-box-generator/ 使用 生成代码 /** * Generated by the WordPre ...

  4. 物体识别重要指标——平均准确率(Average Precision, AP )

    师兄的截图,不知道出处,仅用于学习,多多包涵.

  5. 设置checkbox不能选中,复选框不能选中

    Web开发:设置复选框的只读效果 在Web开发中,有时候需要显示一些复选框(checkbox),表明这个地方是可以进行勾选操作的,但是有时候是只想告知用户"这个地方是可以进行勾选操作的&qu ...

  6. css---选择器的特殊性

    特殊性这点吃了亏,是该梳理一下了~ 先说一下大概的选择器,沾代码 最权威的还是<css权威指南> 我们把特殊性分为4个等级,每个等级代表一类选择器,每个等级的值为其所代表的选择器的个数乘以 ...

  7. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  8. 《DSP using MATLAB》示例Example 8.12

    %% ------------------------------------------------------------------------ %% Output Info about thi ...

  9. svn 操作命令

    1.第一次提交代码到svn svn import project_directory PATH 2.将文件checkout到本地svn checkout path(path是服务器上的目录) 例如:s ...

  10. [Luogu4233]射命丸文的笔记

    luogu description 对于\(x\in[1,n]\)求\(x\)点强联通竞赛图中的哈密顿回路的期望个数膜\(998244353\). \(n\le10^5\) sol 首先\(n\)点竞 ...