HDU5575 转化成树形DP

YOLOv5血细胞检测实战:从XML标注到CPU部署的全流程工程指南 目标检测是医学图像分析的核心技术之一,其原理在于通过卷积神经网络提取多尺度特征并回归边界框与类别概率。在显微镜血细胞识别这类小目标、低信噪比、强泛化需求的场景中,模型性能不仅取决于算法先进性,更依赖数据预处理的鲁棒性、训练策略的物理可解释性以及部署方案的轻量化能力。YOLOv5凭借PyTorch原生支持、Mosaic增强对小目标的适配性,以及端到端命令行接口,在血细胞检测任务中展现出显著的工程落地优势。本文聚焦BCCD等显微图像数据集,系统解析XML→YOLO格式转换中的归一化陷阱、动态尺寸校验与标签校验机 阅读详情

按照从低到高的顺序处理所有的隔板和询问,在这个过程中用并查集维护一个连通的区域,每次合并区间或者处理一个在新的高度的询问时都新建一个树节点。总体来说大概就是自底向上地建树,之后就可以进行傻逼树形DP啦

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<iomanip>
#include<vector>
#include<set>
#include<map>
#include<queue>

using namespace std;
typedef long long LL;
typedef unsigned long long ULL;

#define rep(i,k,n) for(int i=(k);i<=(n);i++)
#define rep0(i,n) for(int i=0;i<(n);i++)
#define red(i,k,n) for(int i=(k);i>=(n);i--)
#define sqr(x) ((x)*(x))
#define clr(x,y) memset((x),(y),sizeof(x))
#define pb push_back
#define mod 1000000007
const int maxn=400010;
int n,m,dp[maxn][2],f[maxn],g[maxn];
pair<int,int> h[maxn];
vector<int> e[maxn];
struct node
{
    int x,y,z;
    inline void read()
    {
        scanf("%d%d%d",&x,&y,&z);
    }
    bool operator < (const node &a) const
    {
        return y==a.y?x<a.x:y<a.y;
    }
}qry[maxn];

void dfs(int x)
{
    for(int i=0;i<e[x].size();i++)
    {
        int v=e[x][i];
        dfs(v);
        dp[x][0]+=max(dp[v][0],dp[v][1]);
        dp[x][1]+=dp[v][1];
    }
}

int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}

int main()
{
    int T,cas=0;scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        rep(i,1,n-1){scanf("%d",&h[i].first);h[i].second=i;}
        rep(i,1,m)qry[i].read();
        printf("Case #%d: ",++cas);
        sort(qry+1,qry+1+m);
        sort(h+1,h+n);
        rep(i,1,n)
        {
            f[i]=g[i]=i;
            e[i].clear();
            dp[i][0]=dp[i][1]=0;
        }
        int cntn=1,cntm=1,now=n;
        qry[0].y=-1;
        while(cntn<n||cntm<=m)
        {
            if(cntm>m||(cntn<n&&h[cntn].first<=qry[cntm].y))
            {
                e[++now].clear();dp[now][0]=dp[now][1]=0;
                int pos=h[cntn].second;
                e[now].pb(g[getf(pos)]);
                e[now].pb(g[getf(pos+1)]);
                f[getf(pos)]=getf(pos+1);
                g[getf(pos)]=now;
                cntn++;
            }
            else
            {
                int tmp=g[getf(qry[cntm].x)];
                if(qry[cntm].y==qry[cntm-1].y&&tmp==g[getf(qry[cntm-1].x)])
                {
                    dp[tmp][qry[cntm].z]++;

                }
                else
                {
                    e[++now].clear();dp[now][0]=dp[now][1]=0;
                    e[now].pb(g[getf(qry[cntm].x)]);
                    g[getf(qry[cntm].x)]=now;
                    dp[now][qry[cntm].z]++;
                }
                cntm++;
            }
        }
        dfs(now);
        printf("%d\n",max(dp[now][0],dp[now][1]));
    }

    return 0;
}
HDU5575 Discover Water Tank 2015上海现场赛D题 (树形dp,并查集,左偏树) 题目大意: 有一个1维的长度为N,高度无限的水柜,现在要用N-1个挡板将其分为N个长度为1的小格,然后向水柜中注水,水可以低于挡板也可以以溢出去(这样就要与旁边格子的水位相同),现在有M次探测,探测i,y,k为查询第i个格子高度y+0.5处是否有水,k=1表示有水,k=0表示没有水,这M次探测不保证结果正确,现求结果正确个数的最大可能值。思路: 这道题可以用类似树形dp的方法求解,依照分隔挡板由 阅读详情

相关推荐

华为数通---配置风暴控制案例

风暴控制可以通过阻塞报文或关闭端口来阻断广播、未知组播和未知单播报文的流量。

2301_77081516的博客 1626

HDU--5575、Discover Water Tank (思维、优先队列)

题目链接 题面: 题意: 有一个 1∗n1*n1∗n 的水箱,水箱的四周的高度为无穷大。现在用 n−1n-1n−1 高度为 hih_ihi​ 的隔板将水箱分为 nnn 个 1∗11*11∗1 的部分。 隔板不透水,但是水的流动遵循一般的物理规律,即如果当前水位如果比某一侧的隔板要高,谁就会从一个部分流向另一个部分。 现在已知这 nnn 个部分某些部分可能有一定高度的水,进行 mmm 次探测,第 iii 次探测以 xxx yyy zzz 的形式给出,如果 z=0z=0z=0 ,说明第 xxx 个部分高度为

_Griefs 493

Grafana图像渲染插件安装全攻略:解决依赖缺失问题(附完整命令清单)

本文详细介绍了在CentOS/RHEL环境下安装Grafana图像渲染插件`grafana-image-renderer`的全过程,包括解决常见的依赖缺失问题。通过提供完整的命令清单和疑难问题排查指南,帮助用户高效部署和优化插件性能,确保图像渲染功能稳定运行。

weixin_30399821的博客 86

HDU 5575 Discover Water Tank 并查集 树形DP

题意: 有一个水槽,边界的两块板是无穷高的,中间有n-1块隔板(有高度),现有一些条件(i,y,k),表示从左到右数的第i列中,在高度为(y+0.5)的地方是否有水(有水:k = 1),问最多能同时满足多少个条件。范围:1e5 分析: 考虑按隔板的高度从小到大合并隔板相邻的两列,合并的时候新开一个节点,这个可以用并查集来做。 这样合并过来就会得到一棵树,接下来就考虑如何把询问塞进...

anxilai4958的博客 245

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

海康威视国内版监控设备改英文界面难题:原因解析与解决方案

跨境安防设备部署中,国内采购的海康威视监控设备常因仅支持中文界面导致海外用户无法操作。本文剖析了该问题的核心原因:海康威视对国内版和海外版设备实行区域锁定策略,国内版固件仅内置中文且无法通过常规方式切换语言。针对此问题,文章提供了三种解决方案:1)官方合规的海外版固件更换;2)低成本的操作界面翻译与远程协助;3)长期更换海外版设备的彻底解决方案。同时给出了跨境采购的注意事项,强调应提前确认设备版本、拒绝非官方改造并预留适配时间。

海康威视技术支持 3963

HDU 5575 Discover Water Tank(并查集+左偏树/启发式合并)

非常巧妙的一道题。         大致题意就是,给你一个水池,有N-1个隔板分成N个格子,告诉你隔板的高度。给出你M个询问以及询问的结果,然后问你这M个询问中为真实的最多有几个。询问的格式是x、y、is,表示第x个格子,在高度为y的地方,是否有水。         首先,最基本的,你要想到,当没有水的时候,答案就是所有is==0的询问。然后当有水的时候,有可能满足条件的询问会更多。既然如此,我们显然可以对所有is==1的询问的水位按照从低到高的次序排序,然后枚举每一个水位高度,把对应格子的水位变成那个高度

alpc_qleonardo 880

从二体运动到高精度轨道:STK与MATLAB联动的轨道外推算法演进史

本文探讨了轨道外推算法从二体运动到高精度轨道预报(HPOP)的演进历程,重点分析了STK与MATLAB协同仿真环境下的技术实现与应用。通过对比不同算法的精度与适用场景,展示了HPOP在卫星参数优化和轨道设计中的优势,为航天任务规划提供了高效解决方案。

weixin_29082143的博客 700

hdu 5575 Discover Water Tank(可合并堆)

题目链接:hdu 5575 Discover Water Tank 题意: 有一个大水箱,里面有N-1个隔板,将这个大水箱分成了N个小水箱,每个隔板有一定的高度。 现在有m条信息,每条信息表示第x个水箱的y高度是否有水。 现在有一些信息有矛盾,问你最多可以选多少条信息出来,他们相互都不矛盾。 题解: 队友写了一个排序后模拟的程序,跑的飞快,hdu上第一。(不是很懂~~) 然后自己写了...

weixin_30872337的博客 195

高效爬取懂车帝车型数据:从静态解析到动态反爬实战

本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。

wind6的博客 937

【网络安全 | 渗透工具】Hydra安装使用详细教程

Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast

等风来 9202

树形DP+并查集+左偏树, HDU-5575,Discover Water Tank,2015上海现场赛D题

只是ACM/IICPC 2015 上海区域赛的一道题。原题链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=655 题目描述 N-1个木板把一个水箱划分成了N部分(从左到右形成了编号为[1,N]的N个小水箱)。这些木板高度不尽相同。因为水往低处流和木板相隔,所以整个大水箱中有若干个高低不同的水平面。

yichudu 1043

Open3D (C++) 泊松重建【2025最新版】

使用C++版本的Open3D实现点云的泊松重建

点云侠的博客 3077

2015 上海区域赛 D Discover water tank 并查集dp+左偏树

题意: 这个博客上说的都很清楚,不再多说 感觉这道题可以命名为并查集dp 包括题解也是,具体解释一下左偏树的使用。 左偏树,说白了就是可合并优先队列,你有两个优先队列,那么怎么才能让他合并成一个呢,stl库的优先队列是做不到的,只能手动实现左偏树,这种数据结构可以实现在o(logn)的时间内合并两个优先队列 int merge(int a, int b) { if (!a)r

tianji_fange_tuhao的博客 991

IMSL CNL 7.0.0 (x86-64)Crack

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU-5575-Discover Water Tank

ACM模版描述题解左偏树可解。初始默认所有 z=0z = 0 的情况,然后枚举 z=1z = 1 的情况来更新答案,并且可以用并查集来维护合并的水箱,既然水箱要合并,那么计算水箱的合并用可并堆比较快,可并堆中比较常用编码难度比较低的数到左偏树了。这里由于需要向左向右进行查找挡板,合并后就忽视掉中间的挡板从而视作一个整体,所以仿真链式存储结构比较好。代码#include <iostream> #inc

逐梦者 667

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HDU 5575 Discover Water Tank 并查集+左偏树

不妨假定初始答案为所有的无水询问,因为这样一定没有冲突。 然后枚举有水询问、水位线到这里时,答案能否更优。 若水位线达到某一高度,则可能淹没旁边的水箱,那么实际就变成了一个大水箱,所以考虑用并查集来优化,为保证合并顺序正确,先对有水询问按水位高度排序。 下面思考更新答案,朴素的做法是枚举此水位线下的有水询问和无水询问的差,但实际上因为有水询问的水位高度已经排序,我们会做大量重复枚举,所以考虑

Cabinfever的专栏 1773

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

以洛谷 P3377 【模板】左偏树(可并堆) 为例的左偏树

洛谷链接: https://www.luogu.org/problem/P3377 定义 左偏树是一种可并堆的实现。左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针(left, right)外,还有两个属性: 键值和距离(英文文献中称为s-value)。键值用于比较节点的大小。 下面的是百度百科给出的距离的定义。如果想要严谨的可以参考下面的内容,我感性理解一下就是,没有两个儿子...

人生如戏 474

HDU 5575

HDU 5575 左偏树 洛谷左偏树裸题:https://www.luogu.org/problem/P3377 洛谷讲解:https://www.cnblogs.com/pks-t/p/10326682.html 洛谷AC代码: #include <bits/stdc++.h> const int N=100010; #define ls S[x].Son[0] #def...

flyzer的博客 303

【HDU】5574 Colorful Tree【子树染色,询问子树颜色数——线段树+bit+lca+set】

题目链接:【HDU】5574 Colorful Tree#include <bits/stdc++.h> using namespace std ;typedef long long LL ; typedef pair < int , int > pii ; #define clr( a , x ) memset ( a , x , sizeof a )const int MAXN = 100005

poursoul 2586

笛卡尔树详解

笛卡尔树

xinchendahai123的博客 1529

HDU 5575 Discover Water Tank(线段树+自底向上dp+并查集)

题意 给定n个挡板和m次回答,每次回答为x号水池的H+0.5高度是否有水,问这些回答互不矛盾的最大集合。 题解 设定状态dp[i][0-1]代表第i个区间枚举到当前回答后有水的最大不矛盾集合和没水的最大不矛盾集合。1代表有水,0代表没水。 我们将回答的H从小到大排序后升序枚举,对于第i个回答,我们可以用线段树定位出其所影响的区间[l,r]在这个区间内去进行dp转移。同时我们还发现若枚举到了一定的高...

TelmaZzzz的博客 375

hdu 5575 Discover Water Tank 数据结构xjb维护

Problem Description A lot of frogs are living in a water tank, but none of them know exactly how much water are there. The water tank has an infinite height, but with a narrow bottom. The length of ...

zstu_zy的博客 435

hdu 5575 Discover Water Tank 左偏树

A lot of frogs are living in a water tank, but none of them know exactly how much water are there. The water tank has an infinite height, but with a narrow bottom. The length of the tank is N, and th...

zstu_zy的博客 441

HDU 5575 Discover Water Tank

把每个水箱当作一个并查集,每个无水的探测当做一个左偏树。有水的探测则放在数组中。并用一个数组使水箱和左偏树对应起来(一个水箱最多对应一个左偏树,即使一个水箱有多个无水的探测,我们也可以通过左偏树的合并使它们变为一个)。

Brassica_的菜园 1819

hdu 5576 dp

题目大意:给你一个长度为 n 的 字符串表示一个乘法,一次操作随机选两个字符进行交换,进行m次操作,让你求出所有可能操作 的答案和。 (1 <= n, m <= 50) 思路:巨难。。 对于固定位置的三个字符来说,把中间的看成*, 两边的为a,b, 这个产生的贡献为,a * b * C,C只与a, b和 * 的位置有关, 所以我们只要求出a*b的贡献就好啦。 ...

179
上一篇: hdu4876 暴搜剪枝
下一篇: 数论
窝嘞割草
博客等级 码龄12年 10粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值