hdu 5438 Ponds(线段树+dfs)

MobaXterm终端工具个人学习版安装包及常用配置备份 资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。 立即下载

题意:

有n个点,m条边,每个点都有权值。
然后开始删除点,删点规则是如果这个点连接其他点的数量小于2,那么这个点可以删除。
如果删除了某些点产生了其他可删除的点也将其删除。
直到删除到不能为止。问最后剩余的联通块中,点的数量是奇数的联通块中的点的权值和是多少。

解析:

先算出所有点的度数,然后把这些度数存入线段树中,每次询问线段树找到等于最小的度数的节点,把和该最小度数的节点相连的所有节点的度数-1,直到不能再删除为止。
线段树的作用就是加快查询最小度数的速度,以及加快查询等于最小度数节点的速度。
然后对剩下的节点进行dfs,找到奇数的联通块,把其权值加到答案中。
PS:看了题解,其实这题是拓扑排序,但是线段树做多了,看什么都像线段树了……

my code

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define ls (o<<1)
#define rs (o<<1|1)
#define lson ls, L, M
#define rson rs, M+1, R
#define MID (L + R) >> 1
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;
const int N = 1e4 + 10;

int n, m;
vector<int> G[N];
ll a[N], minv[N << 2];
int deg[N];
bool vis[N];

void init() {
    memset(vis, false, sizeof(vis));
    memset(deg, 0, sizeof(deg));
    for(int i = 1; i <= n; i++)
        G[i].clear();
}

inline void addEdge(int u, int v) {
    G[u].push_back(v);
}

inline void pushUp(int o) {
    minv[o] = min(minv[ls], minv[rs]);
}

void build(int o, int L, int R) {
    if(L == R) {
        minv[o] = deg[L];
        return ;
    }
    int M = MID;
    build(lson);
    build(rson);
    pushUp(o);
}

int query(int o, int L, int R, int val) {
    if(L == R) {
        minv[o] = INF;
        return L;
    }
    int M = MID, ret = 0;
    if(val == minv[ls]) ret = query(lson, val);
    else ret = query(rson, val);
    pushUp(o);
    return ret;
}

void remove(int o, int L, int R, int pos) {
    if(L == R) {
        minv[o]--;
        if(minv[o] < 0) minv[o] = INF;
        return ;
    }
    int M = MID;
    if(pos <= M) remove(lson, pos);
    else remove(rson, pos);
    pushUp(o);
}

void dfs(int u, ll &sum, int &tot) {
    tot++;
    sum += a[u];
    for(int i = 0; i < G[u].size(); i++) {
        int v = G[u][i];
        if(vis[v]) continue;
        vis[v] = true;
        dfs(v, sum, tot);
    }
}

ll cal() {
    int tot;
    ll sum, ret = 0;
    for(int i = 1; i <= n; i++) {
        if(vis[i]) continue;
        tot = sum = 0;
        vis[i] = true;
        dfs(i, sum, tot);
        if(tot & 1) ret += sum;
    }
    return ret;
}

int main() {
    int u, v;
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d%d", &n, &m);
        init();
        for(int i = 1; i <= n; i++) {
            scanf("%lld", &a[i]);
        }

        for(int i = 1; i <= m; i++) {
            scanf("%d%d", &u, &v);
            deg[u]++, deg[v]++;
            addEdge(u, v);
            addEdge(v, u);
        }

        build(1, 1, n);
        while(minv[1] <= 1) {
            u = query(1, 1, n, minv[1]);
            vis[u] = true;
            for(int i = 0; i < G[u].size(); i++) {
                int v = G[u][i];
                if(vis[v]) continue;
                remove(1, 1, n, v);
            }
        }

        printf("%lld\n", cal());
    }
    return 0;
}
机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取 立即下载

相关推荐

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

hdu 5381 The sum of gcd(线段树等差数列区间修改+单点查询)

题意: 给出一个数组a,叫你每次询问如下等式的值。 f(l,r)=∑ri=l∑rj=igcd(ai,ai+1....aj)f(l,r)=\sum_{i=l}^{r}\sum_{j=i}^{r}gcd(a_i,a_{i+1}....a_{j}) 解析: 思考了很久终于理解了学长的思路 给你一个序列,这个序列的子序列gcd的个数不会超过logN个(N为每个数字,最大能取到的范围)

小G的ACM之路 3449

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

HDU 5238 Calculator(中国剩余定理+线段树)

题意: 有加,乘,次方3种运算,初始值为x,给定运算式。 现在有2种操作: 第一种:告诉你x的值,求答案模29393。 第二种:更改某个位置的运算。 解析: 线段树维护值域的问题,但是那个操作并不能简单的合并,因为值域还是很大的数组开不下,所以我们得另寻他法。 可以发觉29393并不是质数,29393 = 7×13×17×19。 设: t1=ans%7

小G的ACM之路 1497

11232131231231是的

11232131231231是的

4、设备树的处理(1)

其实到第4节才写设备树的问题完全是因为忘记了,之前有一个版本是先关闭了设备树的,习惯性的认为设备树已经处理完了,失误了!!!前文说过,这个系统是依着荣品的开发板和核心板来的,使用的是5.1内核的SDK。它的SDK里是开发板全功能的,所以设备树也是的。

wsen2012的博客 417

hdu 4533 威威猫系列故事――晒被子(二重等差数列+差分前缀和)

题意: 给你N个矩形,每个矩形给出左下角坐标,右上角坐标,有M个询问,每个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算)。 解析: 真的是细节非常难处理的题目,从有思路到AC,整整敲了一天。 由于矩形之间是相互独立的,而且tit_i又不大,可以把思路转化为每个矩形对时间的贡献是多少。 如果是一个矩形,可以转化成一个正方形,外加一个矩形的情况。

小G的ACM之路 1287

STM32实战——七段数码管动态扫描技术详解

本文详细解析了STM32控制七段数码管的动态扫描技术,包括硬件连接、CubeMX配置及编程实现。通过分时复用原理和优化代码逻辑,实现稳定显示效果,并解决亮度不均、闪烁等常见问题。适合嵌入式开发者快速掌握STM32数码管驱动技术。

weixin_42561143的博客 279

hdu 5239 Doom(线段树+数论)

题意: 给出n个数和一个初始值为0的答案。每次操作给出一个区间[l,r],把区间所有的数加到答案中,之后把区间的每个数都平方。每次操作都需要输出答案 mod 9223372034707292160(2 ^ 63 - 2 ^ 31) 思路 这题的做法和 hdu 4027 类似 首先,应该想到这个题可以用线段树来维护区间的和,然后对于(2 ^ 63 - 2 ^ 31)这个数,即任意数的平方

小G的ACM之路 1192

TI LP87745-Q1汽车雷达PMIC评估:从硬件设计到性能测试全解析

在汽车电子和高级驾驶辅助系统(ADAS)中,电源管理单元(PMIC)是确保传感器稳定可靠运行的核心。其工作原理在于集成多路高效电源转换器(如Buck、Boost)和精密监控电路,通过数字接口实现灵活配置与实时诊断。这项技术的核心价值在于为毫米波雷达等关键负载提供低噪声、高精度、满足严格时序与功能安全(ASIL)要求的供电方案,从而提升整个感知系统的信噪比与可靠性。其典型应用场景包括自动驾驶域控制器、车载传感器融合模块等。本文以德州仪器(TI)的LP87745-Q1专用PMIC及其评估模块(EVM)为例,深入

weixin_27017211的博客 311

ICNN实现入侵检测的思路与源码(CIC-IDS-2017)

基于ICNN实现入侵检测,可用于现实网络

t1274171989的博客 8415

hdu 5289 Assignment(ST表+双指针)

题意: 给一个整数序列,多达10万个。问:有多少个区间满足“区间最大元素与最小元素之差不超过k“ 解析: 如果用穷举法,有O(n2)O(n^2)复杂度,这肯定是不可取的。 所以可以用ST算法先预处理每个区间最大和最小值,O(nlog(n))O(nlog(n))。 注意一个区间固定起点,延长终点,那么这个区间的最大值和最小值的差肯定是单调递增的。 所以这题用双指针的方法,枚举

小G的ACM之路 1068

ESP32-S3驱动PCA9685模块:I2C扩展16路舵机控制实战指南

本文提供了ESP32-S3通过I2C总线驱动PCA9685模块扩展16路PWM输出的完整实战指南。详细解析了PCA9685模块原理、硬件连接、I2C地址配置,并给出了核心驱动代码与角度控制函数,帮助开发者解决微控制器PWM引脚不足的问题,轻松实现多路舵机控制。

weixin_32005771的博客 519

Hdu 5147 Sequence II(树状数字 or 线段树 + 输入外挂 前缀和+后缀和)

题意: 给定1~n的一个排列 用A[]数组保存,问有多少下标(a,b,c,d)四元组满足: a解析: 题目中n的范围是50000,O(n^2) 复杂度肯定超时。那么这题明显考察的是log2(n)的算法,对于这题可以用线段树或者树状数组,同时要用到输入外挂,不然会超时。 思路(参考别人做法) 枚举c的位置,那么每一次枚举中的方法数为 1~c-1 中(a,b)的个数 乘以 c~n中(c

小G的ACM之路 1015

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 150

基于UC3842的反激电源的全面深入解析与MATLAB仿真

内置电流检测,可实现电流模式控制,提高系统的动态响应性。多种保护功能,如欠压锁定、过温保护、短路保护等,确保系统的安全可靠运行。宽工作电压范围,适应不同的电源设计需求。简单的外部元件配置,易于实现。UC3842的典型应用包括开关电源、DC-DC转换器和反激式电源等,其稳定性和可靠性在实际应用中得到了广泛验证。

qq_38334677的博客 1086

HDU 5372 Segment Game(线段树+离散化)

题意: 有两种操作: 1. 插入一个线段 2. 删除一个已存在的线段 每次插入后输出当前插入的线段能完整覆盖存在的几条线段。 解析: 线段树上面维护的是两个值,左端点的和,右端点的和 每次插入一条区间[L, R]就, 先询问 [0, R] 的右端点个数 lsum 再询问[L, INF]的左端点的个数 rsum tot表示:当前线段还有几条

小G的ACM之路 994

AI智算-K8s+vLLM & Ray:DeepSeek-r1 671B 满血版分布式推理部署实践

自从上次发布 【AI-智算】K8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略] 文章后,本次将演示另一个主流推理引擎工具——vLLM,结合K8s、LWS、Ray、Volcano等技术栈,部署DeepSeek-r1 671b 满血版分布式推理集群,并对比其与SGLang推理引擎的性能表现。

Kason_iWiki 1825

hdu 5412 CRB and Queries(树套树模板,区间第K大)

题意: 给出一串数字,然后给出两种操作: 1. 1 L V 操作一:把下标为L的点的值替换为 V 2. 2 L R K 操作二:在[L,R][L, R]区间求第K大 解析: 本模板转载自 http://blog.youkuaiyun.com/u012860063/article/details/47813079 mymy codecode#include <cstdio> #inc

小G的ACM之路 991

IMSL CNL 7.0.0 (x86-64)Crack

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

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

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

hdu 3016 Man Down(线段树区间更新+dp)

题意: 是男人就下100层相信很多人都玩过,这题就是简单的模拟这个游戏。 有nn块木板,每块木板有4个属性,高h(h>0),左边界,右边界,以及掉落在它上面,获得多少生命值,一个人从最高的木板开始往下跳,初始时生命值为100,问最后掉落到地面能获得的生命值最多为多少(如果途中生命值为≤0,那么这个人会死去),如果无法跳到地面,输出-1。 解析: 既然只能垂直下落,而且是落在最近的板上,

小G的ACM之路 979

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

URAL 1989 Subpalindromes(线段树单点修改+字符串hash)

题意: 给出一个字符串,长度为10^5,有m个操作m<=104m<= 10^4。 有两种操作: 1. 询问[l,r]区间的子串是否回文 2. 将第i个字符改为c。 解析: 用字符串哈希+线段树来做这题,线段树用于查询区间的hash值。 建两棵线段树一棵维护从前向后的hash值,另外一棵维护从后向前的hash值。 那么我们判断是否回文串,就只要看正反区间的哈希值之

小G的ACM之路 971

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

CodeForces 46D Parking Lot(线段树区间合并)

题意: 有一条长度为L的街道,有N个操作,现在有两种操作: (1)”1 a”,表示有一辆长度为a的车开进来想找停车位; 停车位必须满足与它前面的车距离至少为b,与后面的车距离至少为f; 如果能找到这样的停车位,输出这辆车的起始位置(且这个位置最小),否则输出-1; (2)”2 a”,表示第a个事件里进来停车的那辆车开出去了; 解析: 这题和POJ 3677 Hot

小G的ACM之路 966

HDU 4777 Rabbit Kingdom(树状数组+离线处理+尺取法)

题意: 给你n个数,有m个查询,问区间[L,R]之间有多少个数与这个区间内的其他数都互质。 解析: 很显然,[L,R][L,R]区间内的答案就是一个区间内的数的个数,减去与其他数不互质的数即可,即离当前数 aia_i 左边最近的不互质的数的位置(设为L[i])和右边最近的不互质的数的位置(设为R[i])有一个在区间[L,R][L,R]内。 那么问题就变成统计: (1) 区间[

小G的ACM之路 941

HDU 3966 Aragorn's Story(树链剖分+线段树区间更新+手动扩大内存)

题意: 给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C的权值 解析: 典型的树链剖分题目,先进行剖分,然后用线段树去维护即可。 注意: HDU的OJ采用Windows系统,容易爆栈,所以在代码中加入汇编手动扩大内存。 mym

小G的ACM之路 922

UVA 12436 Rip Van Winkle's Code(线段树区间更新)

题意: 对于长度为250000的区间,给了你四种操作: 操作A,从st到ed这段区间内的数,分别加上1,2,…,st-ed+1。 操作B,从st到ed这段区间内的数,分别加上,st-ed+1,st-ed,…,1。 操作C,将st到ed这段区间内的数赋值成x。 操作S,查询st到ed的这段区间内的数的总和。 解析: 因为操作A和操作B都是操作的实际上都是等差数列,所以可

小G的ACM之路 915

UESTC 360 Another LCIS(线段树区间更新)

题意: 有两种操作: 1. 成段增加一个值。 2. 询问从l到r这段区间内的最长连续递增子序列(LCIS)。 解析: 这道题真的是WA到手软了。 看了别人的题解才AC的。 如果某一段的值成段地增加一个量,那么该区间内的数的相对大小是不变的,因此递增子序列的长度是不会改变的。 那么对于结果有影响的信息与值: 1. 每个子区间中的最值 2. 有可

小G的ACM之路 894
上一篇: HDU 1503 Advanced Fruits(LCS+输出路径)
下一篇: hdu 5441 Travel(并查集+二分)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值