题目

传送门: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. 各个数据库中top 的表示方法

    Select Top在不同数据库中的使用用法: 1. Oracle数据库 SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. Infomix数据库 SELECT FI ...

  2. 《利用Python进行数据分析》笔记---第2章--来自bit.ly的1.usa.gov数据

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  3. 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案

    安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...

  4. Recording︱有价值的各类AI、机器学习比赛心得、经验抄录

    今年kaggle华人优胜团队很多,所以经验.心得不少,都是干货慢慢收集. 一.[干货]Kaggle 数据挖掘比赛经验分享 github:https://github.com/ChenglongChen ...

  5. 神经病院Objective-C Runtime入院第一天——isa和Class

    前言 我第一次开始重视Objective-C Runtime是从2014年11月1日,@唐巧老师在微博上发的一条微博开始.   这是sunnyxx在线下的一次分享会.会上还给了4道题目.   这4道题 ...

  6. EP-N8530S USB WIFI 驱动移植

    /*********************************************************************** * EP-N8530S USB WIFI 驱动移植 * ...

  7. OK335xS knob driver hacking

    /************************************************************************* * OK335xS knob driver hac ...

  8. 使用PE工具箱 ughost 恢复系统导致被捆绑一堆软件的问题

    很多的pe系统,都有这么一个东西, 没啥技术含量,就是给ghost 加一个UI 而已 , 但是使用这玩意恢复系统,会被感染一些捆绑软件 ,开机之后就会卡顿, 并下载一堆软件 包括  爱奇艺 , 百度搜 ...

  9. 复选框checkbox样式修改

    该方法只兼容IE9及以上 将checkbox和label关联起来, 将checkbox隐藏掉,通过点击label来点击checkbox,label的样式即可自定义. 通过checkbox:checke ...

  10. U盘格式和对齐扇数(常识)

    一.文件系统常见的四种格式:FAT16.FAT32.NTFS.ExFAT. 虽然四种文件系统的存储方式和特性各不相同,但对于传输速度并不快的存储卡和U盘来说, 实际传输性能却大同小异,理论测试数据相差 ...