POJ 3237 Tree(树链剖分)

UNet 改进(45):轻松集成Triplet Attention,让分割效果起飞! 本文介绍了一种在U-Net架构中集成CSRA残差注意力模块的方法。该模块通过结合通道注意力和空间注意力机制,在U-Net的瓶颈层对特征进行自适应重标定,使网络聚焦于关键区域。文章详细解析了代码实现,包括基础构建块DoubleConv、核心CSRA模块原理及其在U-Net中的战略位置集成。测试表明该模型能保持标准U-Net的输入输出维度,同时通过注意力机制提升特征选择能力。这种模块化设计便于在不同任务中应用,为图像分割领域提供了有效的注意力增强方案。 阅读详情

题意:

一棵树,每个边都有一个权,现在进行一些操作,将某个边变成x,将某段边取反(就是都变成自己的相反数),查询某个区间的最大值

思路:

比较有意思的一个题,主要是维护线段树的时候比较有意思,我们要建立两颗线段树,一个维护最大值,一个维护最小值,在取反的时候,用lazy维护的同时,两个线段树的节点都取反然后交换,这样我们就能通过一颗维护最小值的线段树实现了维护最大值的线段树了

错误及反思:

看到dicuss一群人说自己暴力过了,我就试了下暴力,T了以后就默默的去改线段树了

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define fi first
#define se second
const int N =100010;
int segtree[N*4][2],lazy[N*4];
int top[N],si[N],fa[N],fi[N],son[N],depth[N],id[N],val[N];
pair<int,int> e[N*2],b[N];
int m,tot,tid,n,q;
void addedge(int x,int y)
{
    e[tot].fi=y;
    e[tot].se=fi[x];
    fi[x]=tot++;
    e[tot].fi=x;
    e[tot].se=fi[y];
    fi[y]=tot++;
}
void dfs1(int now,int bef,int dep)
{
    fa[now]=bef;
    depth[now]=dep;
    si[now]=1;
    for(int i=fi[now];i!=-1;i=e[i].se)
        if(e[i].fi!=bef)
        {
            dfs1(e[i].fi,now,dep+1);
            si[now]+=si[e[i].fi];
            if(son[now]==-1) son[now]=e[i].fi;
            else son[now]=si[e[i].fi]>si[son[now]]?e[i].fi:son[now];
        }
}
void dfs2(int now,int tp)
{
    top[now]=tp;
    id[now]=tid++;
    if(son[now]!=-1) dfs2(son[now],tp);
    for(int i=fi[now];i!=-1;i=e[i].se)
        if(e[i].fi!=fa[now]&&e[i].fi!=son[now])
            dfs2(e[i].fi,e[i].fi);
}
void pushup(int rt)
{
    segtree[rt][0]=max(segtree[rt<<1][0],segtree[rt<<1|1][0]);
    segtree[rt][1]=min(segtree[rt<<1][1],segtree[rt<<1|1][1]);
}
void pushdown(int rt)
{
    if(lazy[rt]==-1)
    {
        lazy[rt<<1]=-lazy[rt<<1];
        lazy[rt<<1|1]=-lazy[rt<<1|1];
        lazy[rt]=1;
        segtree[rt<<1][0]=-segtree[rt<<1][0];
        segtree[rt<<1][1]=-segtree[rt<<1][1];
        swap(segtree[rt<<1][0],segtree[rt<<1][1]);
        segtree[rt<<1|1][0]=-segtree[rt<<1|1][0];
        segtree[rt<<1|1][1]=-segtree[rt<<1|1][1];
        swap(segtree[rt<<1|1][0],segtree[rt<<1|1][1]);
    }
}
void change1(int pos,int v,int l,int r,int rt)
{
    if(pos==l&&l==r)
    {
        segtree[rt][0]=v;
        segtree[rt][1]=v;
        return;
    }
    pushdown(rt);
    int m=(l+r)/2;
    if(m>=pos) change1(pos,v,lson);
    else change1(pos,v,rson);
    pushup(rt);
}
int query(int L,int R,int l,int r,int rt)
{
    if(L<=l&&R>=r)
        return segtree[rt][0];
    pushdown(rt);
    int m=(l+r)/2;
    int ans=-1e9;
    if(m>=L) ans=max(ans,query(L,R,lson));
    if(m<R) ans=max(ans,query(L,R,rson));
    pushup(rt);
    return ans;
}
void change2(int L,int R,int l,int r,int rt)
{
    if(L<=l&&R>=r)
    {
        lazy[rt]=-lazy[rt];
        segtree[rt][0]=-segtree[rt][0];
        segtree[rt][1]=-segtree[rt][1];
        swap(segtree[rt][0],segtree[rt][1]);
        return ;
    }
    pushdown(rt);
    int m=(l+r)/2;
    if(m>=L) change2(L,R,lson);
    if(m<R) change2(L,R,rson);
    pushup(rt);
}
void neg(int L,int R)
{
    int f1=top[L],f2=top[R];
    while(f1!=f2)
    {
        if(depth[f1]<depth[f2])
        {
            swap(f1,f2);
            swap(L,R);
        }
        change2(id[f1],id[L],1,tid-1,1);
        L=fa[f1];
        f1=top[L];
    }
    if(L==R) return ;
    if(depth[L]>depth[R]) swap(L,R);
    change2(id[son[L]],id[R],1,tid-1,1);
}
int modify(int L,int R)
{
    int f1=top[L],f2=top[R];
    int ans=-1e9;
    while(f1!=f2)
    {
        if(depth[f1]<depth[f2])
        {
            swap(f1,f2);
            swap(L,R);
        }
        ans=max(ans,query(id[f1],id[L],1,tid-1,1));
        L=fa[f1];
        f1=top[L];
    }
    if(L==R) return ans;
    if(depth[L]>depth[R]) swap(L,R);
    ans=max(ans,query(id[son[L]],id[R],1,tid-1,1));
    return ans;
}
void init()
{
    for(int i=0;i<4*N;i++)lazy[i]=1;
    tot=0;
    tid=0;
    memset(first,-1,sizeof(first));
    memset(son,-1,sizeof(son));
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        init();
        scanf("%d",&n);
        for(int i=0;i<n-1;i++)
        {
            scanf("%d%d%d",&b[i].fi,&b[i].se,&val[i]);
            addedge(b[i].fi,b[i].se);
        }
        dfs1(1,1,1);
        dfs2(1,1);
        for(int i=0;i<n-1;i++)
        {
            if(depth[b[i].fi]<depth[b[i].se])
                swap(b[i].fi,b[i].se);
            change1(id[b[i].fi],val[i],1,tid-1,1);
        }
        char temp[10];
        while(scanf("%s",temp))
        {
            if(temp[0]=='D')
                break;
            int ta,tb;
            scanf("%d%d",&ta,&tb);
            if(temp[0]=='C')
                change1(id[b[ta-1].fi],tb,1,tid-1,1);
            else if(temp[0]=='Q')
                printf("%d\n",modify(ta,tb));
            else
                neg(ta,tb);
        }
    }
}
零基础学simulink仿真建模--基于Simulink进行近端策略优化(PPO)路径规划的仿真建模 特点高效性与稳定性:通过引入剪裁机制,在更新策略时限制步长,从而提高了训练过程的稳定性和效率。适用于多种动作空间:可以处理连续和离散的动作空间问题。无需模型:不需要预先知道环境的确切模型,适合复杂或未知环境。挑战收敛速度与稳定性:确保算法能够在合理的时间内找到近似最优解,并保持训练过程的稳定性。探索与利用平衡:在探索新路径和利用已知信息之间取得平衡。计算资源:对于大规模状态空间和动作空间,计算资源需求较高。首先明确要模拟的任务内容。目标(例如到达指定地点、避开障碍物等)。 阅读详情

相关推荐

视觉机器人抓取实战:从物体定位到抓取估计的完整流程解析(附Python代码示例)

本文详细解析了视觉引导机器人抓取的完整技术流程,涵盖从物体定位、位姿估计到抓取估计的核心步骤。通过Python代码示例,演示了如何使用Open3D等工具进行点云处理、平面分割、PCA与ICP位姿估计,以及基于几何启发式的抓取生成方法,为机器人视觉抓取开发提供了清晰的实战指南。

peach的博客 913

poj 3237 Tree(树链剖分)

题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为vNEGATE a b:将ab路径上所有节点的权值变为相反数QUERY a b:查询ab路径上节点权值的最大值。 解题思路:树链剖分,然后用线段树维护节点权值,成端更新查询。 #include #include #include using namespace

不慌不忙、不急不躁 1434

智能气象站:ESP32驱动的心知天气数据可视化实践

本文详细介绍了基于ESP32微控制器和心知天气API构建智能气象站的完整实践。通过Arduino开发环境,实现天气数据的获取、JSON解析与OLED屏可视化展示,涵盖硬件连接、API配置、低功耗优化及部署问题排查,为物联网开发者提供实用指南。

jump7的博客 210

【POJ3237】Tree 树链剖分

题意: change,把第i条边权值改成v negate,把a到b路径上所有权值取相反数(*(-1)) query,询问a到b路径上所有权值的最大值 树链剖分。 以前一直不会,但是我恶补LCT了,所以先学一下。 对于现在的水平来说,树剖太水了,自己翻资料吧,我只提供一个还算不错的代码。 扒代码的时候可以用我的这个。 附rand和pai。 代码: #inc

辗转山河弋流歌 1186

大模型知识边界探索:LLM设计的极限测试

最优化理论是数学中的一个分支,主要研究如何从给定的一组约束条件下找到最优解。目标函数:定义了需要优化的指标,可以是最大化或最小化。约束条件:定义了在优化过程中需要满足的限制条件。无约束优化:目标函数和约束条件都不存在。有约束优化:目标函数存在,但存在约束条件。多目标优化:同时需要优化多个目标函数。极限测试(Ultimate Test)是一种系统性的方法,用于评估大型模型(如LLM)在极端条件下的性能和稳定性。极端数据分布:与模型训练数据分布显著不同的数据集。极端计算资源。

AI天才研究院 432

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

POJ3237 Tree 树链剖分 边权

POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a->b边权最大值 题解: 修改边权就查询点的深度大的点,用大的点去存这条边的边权,其余的就和点权的是一样的了 取反操作用线段树维护,区间最大值取反就是区间最小值,区间最小值取反就是区间最大值 所以维护两颗...

weixin_30570101的博客 184

【AI编程】Vibe Coding 开发环境搭建与项目实战操作详解

Vibe Coding 开发环境搭建与项目实战操作详解

congge 7335

【POJ3237】【树链剖分】Tree

Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbered 1 through N − 1. Each edge is associated with a weight. Then you are to exec...

Gregory99174的博客 177

2026年全国青少年信息素养大赛算法应用主题赛C++样题及答案解析

2026年全国青少年信息素养大赛算法应用主题赛C++样题

王老师青少年编程 3716

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

poj 3237 Tree 树链剖分

// poj 3237 Tree 树链剖分 // // 解题思路: // // 树链剖分,维护一个最大值和一个最小值, // 区间更新,laz标记.单点更新,去掉叶子节点的laz // 标记.边权改为离根节点较远的点的点权.求lca // 的方式进行区间更新.注意线段树的操作以及push_up() // push_down()的操作.写了很久,感悟颇多,继续加油吧~~~ #include

TIMELIMITE的专栏 541

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 941

poj3237 Tree 树链剖分

http://poj.org/problem?id=3237

438

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Tree POJ - 3237 (树链剖分)

题目 https://cn.vjudge.net/problem/POJ-3237 难点是线段树 #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; using namespace std;...

七九河开的博客 230

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

「POJ3237」Tree【树链剖分+线段树】

题目链接:http://poj.org/problem?id=3237 Tree Time Limit: 5000MS Memory Limit: 131072K Description You are given a tree with NNN nodes. The tree’s nodes are numbered 111 through NNN and its edges are numbe...

wzw 234

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

POJ 3237 Tree 树链剖分

树链剖分基础题 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10010; struct edge { int v, next; }e[maxn*2]; int first[maxn], cn...

diandingyin9417的博客 87

poj 3237 Tree 题解(树链剖分,线段树)

原题链接: poj 题意简述 多组数据。给定一个树,带边权,要支持三种操作,分别是: 两个节点之间的路径的边权全部×−1\times -1×−1,即取相反数 单边修改边权值 求两个节点之间路径上的最长边 数据 输入 第一行一个ttt,表示有ttt组数据。对于每一个数据,先有一个nnn,表示点数。然后n−1n-1n−1行,每行两个数a,b,ca,b,ca,b,c表示a,ba,ba,b之间有一个边...

LightningUZ的博客 287

POJ 3237 Tree (树链剖分)

题目地址:POJ 3237 这题用了一下午。。本来一直认为max和min两个数组是不用改的,只需要改lazy数组,然后在查询的时候利用lazy标记来返回max或-min,后来发现错的很严重。。 这题要在pushdown中修改max和min数组,从而实现最大值取反。 代码如下:#include <iostream> #include <string.h>

scf0920 1153

POJ 3237 Tree (树链剖分)

树链剖分

Muti-Agent 2594

SPOJ 375 QTREE POJ 3237 TREE 树链剖分

http://wenku.baidu.com/view/8861df38376baf1ffc4fada8 先上一往篇论文,我总觉得论文说的不够详细,但是可以理解好多东西。 首先,树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护。 通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中size[v]是以v为根的子树的

Senbonzakura 1371

树链剖分+线段树 poj3237 Tree

传送门:点击打开链接 题意:3种操作,1单点更新,2路径正负反转,3路径查询最大值 思路:线段树维护最大值和最小值和一个懒惰标记,然后在线段树的基础上用树链剖分维护 #include #include #include #include #include #include #include #include #include #include #include #include #inclu

qwb的博客 856

【POJ3237】Tree(树链剖分)

纵然相思入骨,纵然万劫不复。我也只愿你眉眼如初,风华如故。

zyf2000 581
上一篇: POJ 2763 Housewife Wind (树链剖分)
下一篇: POJ 2528 Mayor's posters (线段树+离散)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值