[BZOJ2959]长跑(LCT)

基于FPGA的图像预处理系统(图)  北京机械工业学院 韩娟娟 邓文怡 娄小平 由于获取图像的工具或手段的影响,使获取图像无法完全体现原始图像的全部信息。因此,对图像进行预处理就显得非常重要。预处理的目的是改善图像数据,抑制不需要的变形或者增强某些对于后续处理来说比较重要的图像特征。通常根据预处理目的的不同,把预处理技术归为图像增强技术和图像分割技术两类。图像对比度处理是空间域图像增强的一种方法。由于图像灰度范围狭窄会使 阅读详情

=== ===

这里放传送门

=== ===

题解

因为题目中说每次长跑跑道方向是固定的,也就是一条边不能来回经过。但是答案肯定不是从A沿着一条最近的路跑到B就一定最优了,可能出去绕一圈还能绕回来。那这个出去绕了一圈的过程肯定沿着两条不同的路径从A到了某个点B又从B回到了某个点A,那这可以联想到无向图的双连通分量。因为双连通分量缩点以后可以形成一棵树,那么实际上就是要用LCT维护缩点以后的图,每次加入一条边如果成环了,就把环上的所有点合并起来。一开始想要打个什么标记什么的,但里面那一坨Splay一转就转的乱七八糟。。但是实际上每个点只会被合并一次,被合并过的点再跳的时候直接跳到它的代表元素就可以了。这样的话这个题就很好写了。。但是写完以后在CodeVS上T了4个点,在Tsinsen上T了5个点。。

然后就是蛋疼的卡常过程。。尽量减少无用的找代表元素的Find过程就可以大大提高速度。然而ATP的代码虽然在BZOJ上能过但是在CodeVS上会T一个点,在Tsinsen上竟然T了4个点。。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,v[150010],lkd[150010],top;
struct Node{
    Node *ch[2],*fa;
    int sum,num,val;
    bool rev;
    Node();
    inline bool pl();
    inline bool is_root();
    void Del(Node *F);
    inline void Rev(){swap(ch[1],ch[0]);rev^=1;}
    inline void count();
    inline void push();
}*null,P[150010],*ptr[150010],*father[150010],*st[150010];
inline Node* find(Node *x){
    if (x==father[x->num]) return x;
    father[x->num]=find(father[x->num]);
    return father[x->num];
}
Node::Node(){ch[1]=ch[0]=fa=null;sum=val=num=0;rev=false;}
inline bool Node::pl(){return this==fa->ch[1];}
inline bool Node::is_root(){return this!=fa->ch[1]&&this!=fa->ch[0];}
inline void Node::count(){
    ch[0]=find(ch[0]);ch[1]=find(ch[1]);
    sum=ch[0]->sum+ch[1]->sum+val;
}
inline void Node::push(){
    if (rev==true){
        if (ch[0]!=null) ch[0]->Rev();
        if (ch[1]!=null) ch[1]->Rev();
        rev=false;
    }
}
void Node::Del(Node *F){
    if (this==null) return;
    ch[0]=find(ch[0]);ch[1]=find(ch[1]);
    ch[0]->Del(F);ch[1]->Del(F);
    father[num]=F;
    ch[1]=ch[0]=fa=null;
}
inline void Rotate(Node *k){
    Node *r=k->fa;
    if (k==null||r==null) return;
    int x=k->pl()^1;
    r->ch[x^1]=k->ch[x];
    if (r->ch[x^1]!=null)
      r->ch[x^1]->fa=r;
    if (!r->is_root())
      r->fa->ch[r->pl()]=k;
    k->fa=r->fa;
    r->fa=k;
    k->ch[x]=r;
    r->count();k->count();
}
inline void Splay(Node *r){
    top=0;Node *tmp=r;
    st[++top]=tmp;
    tmp->fa=find(tmp->fa);
    while (!tmp->is_root()){
        st[++top]=tmp->fa;
        tmp=tmp->fa;
        tmp->fa=find(tmp->fa);
    }
    for (int i=top;i>=1;i--) st[i]->push();
    for (;!r->is_root();Rotate(r))
      if (!r->fa->is_root())
        Rotate(r->pl()==r->fa->pl()?r->fa:r);
}
inline void Access(Node *k){
    Node *r=null;
    while (k!=null){
        Splay(k);
        k->ch[1]=r;
        k->count();
        r=k;k=k->fa;
    }
}
void Change_root(Node *x){Access(x);Splay(x);x->Rev();}
void Link(Node *x,Node *y){Change_root(x);x->fa=y;}
void Get_path(Node *x,Node *y){Change_root(y);Access(x);Splay(x);}
inline int check(int x){
    if (lkd[x]==x) return x;
    lkd[x]=check(lkd[x]);
    return lkd[x];
}
inline int get(){
    int x=0;
    char c=getchar();
    while (c<'0'||c>'9') c=getchar();
    while (c<='9'&&c>='0'){
        x=(x<<3)+(x<<1)+c-'0';c=getchar();
    }
    return x;
}
int main()
{
    null=new Node;*null=Node();
    n=get();m=get();
    for (int i=0;i<=n;i++){
        Node *w=&P[i];
        *w=Node();ptr[i]=w;
        father[i]=w;
        w->num=lkd[i]=i;
    }
    father[0]=ptr[0]=null;
    for (int i=1;i<=n;i++){
        v[i]=get();
        P[i].val=P[i].sum=v[i];
    }
    for (int i=1;i<=m;i++){
        int type,a,b;
        type=get();a=get();b=get();
        switch (type){
            case 1:{
                int r1,r2;
                r1=check(a);r2=check(b);
                if (r1!=r2){
                    Link(find(ptr[a]),find(ptr[b]));
                    lkd[r2]=r1;
                }else{
                    Node *tmp,*to;
                    tmp=find(ptr[a]);to=find(ptr[b]);
                    if (tmp==to) break;
                    Get_path(to,tmp);
                    Splay(to);to->val=to->sum;
                    to->Del(to);
                }
                break;
            }
            case 2:{
                Node *tmp=find(ptr[a]);
                Access(tmp);Splay(tmp);
                tmp->val=tmp->val-v[a]+b;
                v[a]=b;tmp->count();
                break;
            }
            case 3:{
                Node *tmp1,*tmp2;
                int r1,r2;
                r1=check(a);r2=check(b);
                if (r1!=r2){printf("-1\n");break;}
                tmp1=find(ptr[a]);tmp2=find(ptr[b]);
                Get_path(tmp1,tmp2);
                printf("%d\n",tmp1->sum);
                break;
            }
        }
    }
    return 0;
}

偏偏在最后出现的补充说明

这种“每个点被合并一次”的均摊分析思路还是很常见的

YOLO11涨点优化:特征融合改进 | 引入BiFPN (双向特征金字塔) 加权融合机制,自适应分配不同尺度特征权重 YOLO11与BiFPN特征融合技术解析 本文深入剖析了YOLO11目标检测架构及其BiFPN特征融合机制的关键创新。2024年发布的YOLO11通过C3k2模块、SPPF池化和C2PSA注意力机制,在COCO数据集上以更少参数实现更高精度。研究发现传统FPN+PAN结构存在特征融合权重分配不均和计算冗余问题,而BiFPN通过双向跨尺度连接和加权融合机制实现了突破: 架构创新:BiFPN采用剪枝策略、跳跃连接增强和层级重复叠加,优化信息流动路径 加权融合:提出快速归一化融合算法,动态分配特征权重,相比Sof 阅读详情

相关推荐

docker安装fastdfs+nginx配置

docker安装fastdfs+nginx,实现图片或文件的上传与下载

weixin_47325126的博客 2193

BZOJ 2959 - 长跑

题意 每个点有各自的权值,要求维护操作:动态加边、动态修改权值、询问在每个点只能经过一次的情况下两点间路程中的最大权值和 题解 首先对于一个静态的图,将其缩点,可以得到一棵树,那么两点间询问的答案即为它们之间经过的 $BCC$ 的权值和 支持动态加边,就需要用到 $LCT$ 去维护 $BCC$ 如果两个点所在 $BCC$ 在不同树上,那么直接连边即可;反之,则说明形成了环,就暴...

229

OTFS从零开始11 10

未来的无线网络有望提供全球覆盖,因此需要支持在恶劣环境下的各种新兴应用,例如飞机上的移动通信(MCA)、低地球轨道(LEO)卫星通信、车对车(V2V)通信、高速铁路(HSR)通信、无人驾驶飞机(UAV)通信和水下声学通信(UAC)。在这些恶劣环境中的无线信道通常被视为对通信不友好,其特点是严重的延迟和多普勒扩散,以及有限的路径寿命等。这些不利于通信的特性使目前移动网络中广泛采用的正交频分复用(OFDM)调制的性能恶化。

qq_46009045的博客 9856

[BZOJ2959]长跑(lct+并查集)

题目描述传送门题解用lct维护一颗动态树。 如果连了某一条边形成了一个环,证明一次长跑这个环上的所有的点都可以被统计,所以可以将这个环缩成一个点。用ufs来实现。 那么一次长跑实际上就是在一条树链上跑,只有一个方向,在lct上维护一个sum就可以了。 时间复杂度是均摊的,因为每一个点至多被缩点一次,所以O(k(mlogn+n)α(n))O(k(mlogn+n)\alpha(n))。lct常数非

zyf2000 1205

horizon之为connection服务器配置证书

打开connection1服务器(connection2 同connection1)再输入connection1的IP地址 可通过域名和IP地址进行登录。这时候用域名登录就发现证书已经没有警告了。win+R 调出“运行”,输入mmc。connection2 同上。如果还有报错请重启一下服务器。打开connection1。可以把这个先删掉 没用。打开DC_01服务器。右键选择证书颁发机构。友好名称只能是vdm。重启之后就没有报错了。

送个祝福给小豪的博客 2960

R语言绘图进阶:五大工具高效组合多图(cowplot、patchwork、layout、par、gridExtra)

本文详细介绍了R语言中五大高效组合多图的工具:cowplot、patchwork、layout、par和gridExtra。针对不同场景提供了实用指南,帮助数据分析师解决图表排版难题,提升报告专业度。特别推荐cowplot用于ggplot2图形组合,patchwork提供最简洁语法,layout则支持完全自定义布局。

weixin_42544663的博客 288

BZOJ2959 长跑

LCT 并查集 BZOJ题目传送门 LCT维护双连通分量。 如果没有1操作可以Tarjan+树剖水过,现在是动态的话就用LCT维护。 当AAA和BBB不连通时直接连起来。当AAA和BBB已经连通时,把它们所在的双连通分量缩到一个点上。具体操作为先把AAA和BBB搞到同一个Splay里,然后遍历Splay,用并查集把所有点都缩到一个点上去并把权值赋给它。 判断是否连通可以直接用LCT,然而...

forezxl的博客 333

保姆级教程:在Ubuntu 22.04上从零安装SUMO并运行第一个交通仿真

本教程详细介绍了在Ubuntu 22.04系统上从零安装SUMO交通仿真软件并运行第一个仿真的完整流程。涵盖环境准备、PPA源安装、核心组件验证、首次仿真案例运行以及进阶配置技巧,特别针对netedit路网编辑器和地图格式转换等实用工具进行重点讲解,帮助用户快速掌握SUMO在交通仿真领域的应用。

weixin_30546189的博客 422

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

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

weixin_34319817的博客 170

南京银行信息技术岗提前批笔试与面试

1、笔试 笔试大致可以分为三部分:性格测试、行测题目、专业知识 性格测试 性格测试一般会有较多的体量,可能一共大概有一百多道接近两百道的样子,这个是不限时的。 前面有100道是这样的题目,就是有四个选项都是各种形容词,然后分别选出最符合自己的与最不符合自己的选项。这种题你就顺着自己的潜意识填就行了,但是前后要一致,我怀疑他出这么多题,可能就是考一考你记不记得前面填了啥。比如你做到第90题的时候,可能会出现和前面第2题类似的四个形容词,更有甚者就是一模一样的,你要对自己之前选的什么有个比较清楚的记忆。

qq_40971025的博客 6922

PX4固件下VTOL固定翼的3种起飞方式对比:手抛vs弹射vs跑道

本文深度解析PX4固件下VTOL固定翼的三种起飞方式:手抛、弹射与跑道起飞,对比其技术差异与适用场景。通过详细的参数配置和工程实践指南,帮助开发者优化起飞性能,提升无人机在不同环境下的适应性和可靠性。文章特别针对PX4飞控系统的最新特性进行了技术探讨。

weixin_30296405的博客 87

bzoj2959 长跑(LCT+并查集)

Description   某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。   为了让同学们更好地监督自己,学校推行了刷卡机制。   学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。   有以下三类事件:   1、修建了一条连接A地点和B地点的跑

Coco_T的博客 504

18、动态系统响应分析

本文系统地介绍了动态系统响应的分析方法,涵盖传递函数建模、特殊输入下的响应特性(如脉冲和阶跃响应)、终值与初值定理的应用、系统直流增益的计算,并深入探讨了一阶和二阶系统的时域特性。通过实例分析与MATLAB仿真,展示了不同参数对系统行为的影响。文章还总结了系统响应在控制设计与故障诊断中的实际应用,并展望了多变量、非线性及实时响应分析的未来研究方向。配合流程图,提供了清晰的系统分析与设计路径。

kite3的博客 141

BZOJ 2959: 长跑 LCT_并查集_点双

BZOJ 2959: 长跑 LCT_并查集_点双 真tm恶心...... Code: #include<bits/stdc++.h> #define maxn 1000000 using namespace std; void setIO(string a) { string in=a+".in",out=a...

EM LGH 189

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

bzoj2959 长跑 LCT+并查集

Description   某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。   为了让同学们更好地监督自己,学校推行了刷卡机制。   学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。   有以下三类事件:   1、修建了一条连接A...

olahiuj的博客 439

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

bzoj 2959: 长跑 lct+并查集

题意某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。 为了让同学们更好地监督自己,学校推行了刷卡机制。 学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。 有以下三类事件: 1、修建了一条连接A地点和B地点的跑道。 2、A点的刷卡机台数变为

beginend 411

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BZOJ 2959: 长跑(LCT+并查集)

题目传送门题目大意就是三个操作: ①将点A,B连一条无向边 ②改变点A的权值 ③问你从A到B的路径的权值和,其中边可以重复一个方向走,点可以重复走但权值只算一次。题解如果没有①②且给出的是树的话,就是一个求LCA。 如果没有①操作而是给出一个静态的树的话,那么就是一个树链剖分了。 如果保证是树(森林)的话,那就直接做一个LCT就行了。关键就是它是一个图。 显然,如果A,B在一个环中的话,

Ab.Ever 815

[BZOJ2959]长跑(LCT+并查集)

题目: 我是超链接 题解: 诶这个题连成一个环是不是还要tarjan缩个点啥的啊,加边的时候会使原本构不成环的部分构成新的环所以考虑在树上用LCT进行动态的缩点和维护操作。 如果加入某条边之前两个端点就联通,那么我们就将两个点之间的路径提出来,加入改边会使这条路径上的点可以互相到达,所以我们把这些点缩成一个代表节点,然后将权值都加给这个节点。并用另外一个并查集(find-fa)维护每个点所...

薇小薇 303

[LCT BZOJ]2959: 长跑

2959: 长跑 某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。   为了让同学们更好地监督自己,学校推行了刷卡机制。   学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。   有以下三类事件:   1、修建了一条连接A地点和B地点的跑道

永远也睡不醒的Axc 602

[BZOJ2959]长跑(LCT+并查集)

用LCT支持:在线加边,单点修改,求一个两个点路径上的所有边BCC的点权和。 用LCT维护边BCC的形态(即缩边双之后的树),2,3操作都是LCT基本操作,重点考虑加边操作。 当这条边的两个端点属于同一BCC时显然没有任何影响。当两个端点不在同一个连通块里时直接在LCT上做link(bel[x],bel[y])即可。 当两个端点在同一个连通块里但不在同一个BCC中时,相当于将(缩点...

weixin_30800807的博客 152

BZOJ 2959 长跑 (LCT、并查集)

题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2959 题解 真是被这题搞得心态大崩……调了7个小时……然而并查集都能写成\(O(n^2)\)的我还能怪谁呢 显然要把每个边双连通分量缩成点,点权为边双连通分量内所有点点权和,然后答案就等于两点路径上点权和 现在需要用LCT维护,就比较麻烦 大概是一边LCT一边使用并查集分别维护...

weixin_30439131的博客 199

BZOJ 2959 长跑 LCT+动态边双

题意:   支持加入边,修改点权,询问两点间走一条路径的最大点权和。不一定是树。 分析:   这个题我们需要知道,假如两点间有环,那么无论如何,这个环上所有的价值都可以被我们获得。   有环,还有这个性质,我们可以自然而然的想到边双联通分量缩点,但是我们不能对于每次加边就重构一下图,更不能每次询问都求一遍最大路,所以我们就需要一个灵活的LCT来维护我们的操作。   我们用并查集...

daxian3723的博客 191

【BZOJ2959】长跑 LCT+并查集

【BZOJ2959】长跑 Description   某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。  为了让同学们更好地监督自己,学校推行了刷卡机制。  学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。  有以下三类事件:  1、修建...

weixin_30814329的博客 88

BZOJ 2959 长跑 (LCT+并查集)

题面:BZOJ传送门 当成有向边做的发现过不去样例,改成无向边就忘了原来的思路.. 因为成环的点一定都能取到,我们把它们压成一个新点,权值为环上所有点的权值和 这样保证了图是一颗森林 每次询问转化为,取出$a$到$b$这条链,求链上所有点的权值和 这实际是一个不删边的动态维护边双的过程 可以用$LCT$维护 加入一条边$<x,y>$时,我们取出链$x,y$ 如果$x,y...

weixin_30700099的博客 149

【bzoj2959】长跑【LCT+并查集】

长跑 Description   某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。   为了让同学们更好地监督自己,学校推行了刷卡机制。   学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机。   有以下三类事件:   1、修建了一...

2016gdgzoi471 1328

bzoj 2959: 长跑 lct

显然,如果没有环的话,走的就是两点之间的唯一路径。直接用lct维护即可。        但是现在有环,显然可以把环缩到一个点,那么用并查集维护一下即可。剩下的使用lct即可。        嘴巴AC还是很简单的。。。 AC代码如下: #include #include #include #define N 150005 using namespace std; int n,m,a[N],

lych的博客 1105
上一篇: [BZOJ2555]SubString(后缀自动机+LCT)
下一篇: [BZOJ3576][Hnoi2014]江南乐(博弈)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值