CodeForces - 786B (线段树?优化建图最短路)

Legacy CodeForces - 786B(数据结构优化建图) 最近学了线段树优化建图,用来处理一个点向一个区间连边,但是边数太大,直接对区间中所有点连边的话会爆炸,不管是什么存图方式都存不下来,而线段树就可以用来优化这种类型的建图。 其实也不是真的建一颗线段树,只是使用了线段树将区间划分为节点的思想去使用它。 具体来说,如果是求最短路一类的问题,可以在父亲节点向左右子树连一条边权为0的边,叶子节点向他代表的端点连一条边权为0的边,然后单点向区间连边的话,就是... 阅读详情

题目链接
题解:
这道题太神仙了!
由于有整个区间指向点的边和点指向一整个区间的边,所以边数它爆炸了。
那么怎么样可以将边数减下来呢?这里以一个点连向一个区间的点为例子,我们可以建立一颗线段树,每个点代表一个区间,每个区间连一条边到它的各个子区间,边权为 0 ,然后将叶子节点连向各个原始的节点。那么要增加一个点连向一个区间的边就变成了这个点连向这个区间所包含的线段树中的节点即可。
同样,增加一个区间到一个点的边我们可以再建一棵线段树,只是把原来的边反过来即可。(注意不可以建在一起,因为双向边都是 0 的话最短路就一直是 0 了!)
下面这张图是第二个样例建的图:
图片
代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#define PI acos(-1.0)
#define INF 0x3f3f3f3f3f3f3f3f
#define P pair<ll, int>
#define debug(x) cout << #x << ": " << x << endl
#define fastio ios::sync_with_stdio(false), cin.tie(0)
const int mod = 1e9 + 7;
const int M = 1000000 + 10;
const int N = 500000 + 10;

int n, q, s, t;
vector<P> G[N];
ll d[N];
int id[2][N], cnt;

void dijkstra(int st)
{
    for(int i = 1; i <= cnt; i ++) d[i] = INF; d[st] = 0;
    bool vis[N] = { false };
    priority_queue<P, vector<P>, greater<P>> que;
    que.push(P{0, st});
    while(que.size()) {
        int now = que.top().second; ll dis = que.top().first;
        que.pop();
        if(vis[now]) continue;
        vis[now] = true;
        for(int i = 0; i < G[now].size(); i ++) {
            if(dis + G[now][i].first < d[G[now][i].second]) {
                d[G[now][i].second] = dis + G[now][i].first;
                que.push(P{d[G[now][i].second], G[now][i].second});
            }
        }
    }
}

void build(int kd, int &now, int l, int r, int rt)
{
    now = ++cnt;
    if(l == r) {
        if(kd) G[now].push_back(P{0, l});
        else G[l].push_back(P{0, now});
        return ;
    }
    int mid = (l + r) >> 1;
    build(kd, id[kd][rt << 1], l, mid, rt << 1);
    build(kd, id[kd][rt << 1 | 1], mid + 1, r, rt << 1 | 1);
    if(kd) {
        G[now].push_back(P{0, id[kd][rt << 1]});
        G[now].push_back(P{0, id[kd][rt << 1 | 1]});
    } else {
        G[id[kd][rt << 1]].push_back(P{0, now});
        G[id[kd][rt << 1 | 1]].push_back(P{0, now});
    }
}

void single(int st, int L, int R, int val, int l, int r, int rt)
{
    if(L <= l && r <= R) {
        G[st].push_back(P{val, id[1][rt]});
        return ;
    }
    int mid = (l + r) >> 1;
    if(L <= mid) single(st, L, R, val, l, mid, rt << 1);
    if(mid < R) single(st, L, R, val, mid + 1, r, rt << 1 | 1);
}

void segment(int ed, int L, int R, int val, int l, int r, int rt)
{
    if(L <= l && r <= R) {
        G[id[0][rt]].push_back(P{val, ed});
        return ;
    }
    int mid = (l + r) >> 1;
    if(L <= mid) segment(ed, L, R, val, l, mid, rt << 1);
    if(mid < R) segment(ed, L, R, val, mid + 1, r, rt << 1 | 1);
}

signed main()
{
    scanf("%d %d %d", &n, &q, &s);
    cnt = n;
    build(0, id[0][1], 1, n, 1);
    build(1, id[1][1], 1, n, 1);
    for(int i = 1, t; i <= q; i ++) {
        scanf("%d", &t);
        if(t == 1) {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            G[u].push_back(P{w, v});
        } else if(t == 2) {
            int v, l, r, w;
            scanf("%d %d %d %d", &v, &l, &r, &w);
            single(v, l, r, w, 1, n, 1);
        } else {
            int v, l, r, w;
            scanf("%d %d %d %d", &v, &l, &r, &w);
            segment(v, l, r, w, 1, n, 1);
        }
    }

    dijkstra(s);

    for(int i = 1; i <= n; i ++) {
        if(d[i] == INF) d[i] = -1;
        printf("%lld%c", d[i], i == n ? '\n' : ' ');
    }

    return 0;
}

/*

  Rejoicing in hope, patient in tribulation.

*/

相关推荐

【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践

嵌入式UI迁移实践:从HTML到LVGL 本文介绍了将HTML/CSS设计的UI原型迁移到嵌入式系统(LVGL)的完整流程,重点涉及"HTML→Figma→LVGL"的三步转换方法。具体内容包括: 设计迁移流程:通过Figma作为中间桥梁,将HTML原型转化为标准设计资产,再适配到LVGL库; 工具与参数准备:详细列出了设计迁移所需的工具链和需要提取的核心设计参数; Figma还原步骤:分组件讲解如何在Figma中1:1还原HTML设计,包括标题栏、压力显示区、图表区等核心组件; LVG

ymlmail的博客 1971

Legacy CodeForces - 786B (线段树优化建边+)

题目 https://cn.vjudge.net/problem/CodeForces-786B 题意 最短路 思路 建两棵树 入树和出树 入树每个结点向孩子建边 出树向父亲建边 每棵树的叶子结点不能相互到达 只能通过新建的边到达 即最短路 #include <bits/stdc++.h> using namespace std; typedef long long ...

七九河开的博客 353

90nm CMOS工艺下6μW超低功耗LDO设计实战:从原理图到版图全解析

本文详细解析了在90nm CMOS工艺下设计一款静态功耗仅为6μW的超低功耗LDO(低压差线性稳压器)的全过程。文章深入探讨了如何通过改进型翻转电压跟随器(FVF)架构实现无输出电容设计,在满足极低功耗和芯片面积高效(chip-area-efficient)要求的同时,确保环路稳定性与快速瞬态响应,为物联网、可穿戴设备等应用提供关键电源管理解决方案。

weixin_29196613的博客 274

Codeforces786B

传送门 n个节点且固定起点最短路,三种加边方法 1.u->v, 边权为w;2. u->[l, r], 边权为w;3. [l, r]->u, 边权为w AC_Code #include <cstdio> #include <iostream> #include <cstring> #include <algorithm>...

ako2654的博客 298

SpringBoot + MyBatis-Plus 高效实现数据变更记录:从注解到通用审计方案(附源码)

*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志*/@Component@Resource/*** 拦截SQL执行*/@Override/*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志/*** 拦截SQL执行。

2601_94871597的博客 558

某手短视频用户主页视频列表爬虫实战:从原理到完整实现

随着短视频平台的迅猛发展,某手(为保护平台隐私,本文以“某手”代指实际目标)已经成为国内最大的短视频社交平台之一,拥有数亿日活用户。对于数据分析师、内容创作者和市场营销人员而言,获取某个用户主页的视频列表具有重要的研究价值——无论是分析头部创作者的内容策略,还是监测竞品的发布频率与互动数据,爬虫技术都成为不可或缺的工具。然而,在2024-2025年的技术环境下,某手已经构建了多层次的反爬机制:包括接口签名加密、请求参数动态混淆、设备指纹检测、IP行为分析以及Web端无限滚动加载的异步数据获取方式。

2201_76125261的博客 540

Codeforces-786B-Legacy (线段树+最短路)

看到区间很容易就能想到线段树。  对于操作2,我们可以建立一棵线段树,线段树的某一个结点表示区间 [l,r] ,那么在图中建立一个结点 u 表示区间 [l,r] ,新建点u 指向 l,l+1,l+2...r的边,权值为 0 。  当得到一个操作 (v,l,r,w) 时,查询一次线段树,把所有符合 [ql,qr]∈[l,r] 的极大区间结点建立一条被 v 指向的边,权值为 w 。这样就能表示 v指向...

c_czl的博客 291

行人检测模型在海思平台上的部署:从 PyTorch 到 NNIE 深度优化与实践

摘要 本文详细介绍行人检测模型从PyTorch到海思NNIE平台的部署流程。首先分析了行人检测面临的挑战(尺度变化、遮挡、姿态多样性等)及边缘部署的优势(实时性、隐私保护等)。重点阐述了模型转换过程:PyTorch→ONNX→Caffe→NNIE-WK,其中PyTorch转ONNX需注意评估模式设置、虚拟输入匹配、操作集版本选择等关键点。文章旨在帮助开发者在海思3516D芯片上实现高效的行人检测,克服部署过程中的常见问题,最终实现边缘设备的实时目标检测能力。

FJN110的博客 216

CodeForces - 786B Legacy【最短路+线段树优化建边】

Time limit 2000 ms Memory limit 262144 kB Rick and his co-workers have made a new radioactive formula and a lot of bad guys are after them. So Rick wants to give his legacy to Morty before bad guys ca...

niiick 635

044.树莓派4B部署YOLO:从系统烧录到模型运行

《树莓派4B部署YOLOv8实战笔记》摘要:本文详细记录了在ARM架构树莓派4B上部署YOLOv8的全流程。关键点包括:必须使用64位系统并手动编译OpenCV(禁用FFMPEG、开启NEON优化);模型需在x86转换为TFLite格式(分辨率不超过320×320);推理代码使用tflite_runtime替代TensorFlow以减少内存占用;针对USB摄像头卡顿、内存泄漏等典型问题给出了解决方案。

2603_95664987的博客 169

某城商银行生产容器云平台详细设计方案分享及经验总结

AS3模式的CIS容器部署在K8S集群内,作为F5的控制器,CIS容器通过对K8S集群内Configmap资源进行监控,将Configmap资源中的内容转化为F5的配置,将配置推送给 F5 ,CIS容器还通过K8S标准的API接口完成业务发现和实时监听集群内Pod的变化,一旦Pod发生变化,相应的更新会及时推送给F5,并完成更新。容器技术发展非常迅速,现在应用大多以容器作为承载介质,前两年在容器云上承载的应用类型主要是Web类,随着容器云领域的不断发展,越来越多的应用类型将迁移至容器云,包括有状态应用。

qq_61890005的博客 856

[最短路优化] Codeforces 786B. Legacy (线段树优化建图)

这建立图的方式 网络流 也可以出 只能说 出题人毒瘤啊 图是类似线段树结构 动态开点 参考来源 https://blog.youkuaiyun.com/KIDGIN7439/article/details/83623451 线段树优化建图。 建立两棵线段树,其上点的点权分别表示“到达这个区间内所有点的最小花费”和“到达这个区间内任意一个点的最小花费”。 对于第一种路直接加边即可 对于第二种路,添加从v到第...

蒟蒻的最后的倔强 445

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6359

CodeForces-786B Legacy (线段树优化建图,单源最短路)

题目链接:CodeForces-786B Legacy 题意 有$n$个点,$q$次3种类型的操作: $1\ u\ v\ w$,连边$u\to v$,权值为$w$;$2\ v\ l\ r\ w$,连边$v\to [l, r]$,权值为$w$;$3\ v\ l\ r\ w$,连边$[l,r]\to v$,权值为$w$。 其中$[l,r]$表示结点编号在此范围内的所有结点。 求给...

weixin_30699465的博客 127

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

CodeForces - 786B Legacy 【思维最短路 and 线段树优化建图】

传送门 题意: 有n个点, q次操作, 操作有三种: 1 u v w 表示u -&gt; v 有有一条权值为w的边. 2 u l r w 表示 u 到 下标在[l, r] 的城市 有一条权值为w的边 3 u l r w 表示 下标在[l, r] 的城市 到 u 有一条权值为w的边 然后求给出起点s, 输出s到每一个点的最小花费. 不能到达输出-1. 思路: 很明显直接暴力建边, 建的过...

Anxdada -- 我等风来也等你 885

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CodeForces 786B Legacy(线段树优化建图+最短路)

【题目链接】http://codeforces.com/problemset/problem/786/B 【题目大意】   给出一些星球,现在有一些传送枪,可以从一个星球到另一个星球,   从一个星球到另一些星球,或者从一些星球到某个星球,每种传送枪使用一次要花费不同的价格   地球是其中一个星球,问从地球到其它星球的最少花费是多少 【题解】   因为一个星...

weixin_30825199的博客 110

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Codeforces.786B.Legacy(线段树优化建图 最短路Dijkstra)

题目链接 \(Description\) 有\(n\)个点。你有\(Q\)种项目可以选择(边都是有向边,每次给定\(t,u,v/lr,w\)): t==1,建一条\(u\to v\)的边,花费\(w\); t==2,由\(u\)向\([l,r]\)中任意一些点连边,每次花费\(w\); t==3,由\([l,r]\)中任意一些点向u连边,每次花费\(w\)。 最后求使给定的\(s\)到达点\(i(...

weixin_30711917的博客 181

Codeforces 786B Legacy (线段树优化建图)

Codeforces 786B Legacy (线段树优化建图) 题意:\(n\)个点,有\(3\)种连边操作:1.将\(u\)指向\(v\);2.将\(v\)指向编号在区间\([l,r]\)的点;3.将\([l,r]\)中的所有点指向\(v\) 做法:线段树优化建图。拓展一些新的节点来代表某些区间的点,然后,如果需要进行区间\([L,R]\)连边,那么就可以将\([L,R]\)拆成一...

dehukun0483的博客 169

Legacy 【CodeForces - 786B】【线段树优化建图】

题目链接CF-786B 题意:有N个点,Q次操作,图的起点是S,问经过Q次操作之后,S到每个点的最短路。 增加从点v到点u的距离w的边 增加从点v到点[l, r]区间的每个点的距离w的边 增加从区间[l, r]到点v的距离为w的边 于是,我们可以开两棵线段树,分别表示出入的情况,然后操作结束之后跑一次堆优化的Dijkstra即可。 #include <iostream> #include <cstdio> #include <cmath> #include.

既然弱小,就只顾变强就是了 312

codeforces CF786B CF787D Legacy 线段树优化建图

$ \Rightarrow $ 戳我进CF原题 D. Legacy time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output   Rick and his co-workers have made a new rad...

ayf1988的博客 290

Codeforces 786B Legacy 线段树优化建图

题意翻译 Rick 和他的同事们做出了一种新的带放射性的婴儿食品(???根据图片和原文的确如此…),与此同时很多坏人正追赶着他们。因此 Rick 想在坏人们捉到他之前把他的遗产留给 Morty。 在宇宙中一共有 nn 个星球标号为 1 \sim n1∼n。Rick 现在身处于标号为 ss 的星球(地球)但是他不知道 Morty 在哪里。 众所周知,Rick 有一个传送枪,他用这把枪可以制造出一个从...

青烟绕指柔的博客 385

线段树优化建图

先从一道例题开始:CodeForces - 786B Legacy 题意:   有n(≤105)个点,q(≤105)个操作,每个操作为以下三种操作之一:   操作一:u到[l,r]之间的点建一条边权为w的有向边;   操作二:[l,r]的点到u之间建一条边权为w的有向边;   操作三:u到v建一条边权为w的有向边;   求点到其他点的最短路,无法到达的点输出-1。 分析: ...

weixin_30578677的博客 156

codeforces 786B (线段树构图+最短路径)

线段树构图,跑最短路

Out_of_Cage的博客 700

Codeforces786 B. Legacy (线段树优化建图)

题意: 一个n个点的图,一开始没有边,现在进行m次操作,操作有三种: 1 x y z,点x对点y建立一条权值为z的有向边 2 x l r z,点x对[l,r]的所有点都建立一条权值为z的有向边 3 x l r z,[l,r]的所有点都对点x建立一条权值为z的有向边 给出一个起点,输出起点到所有点的最短距离是多少,对于无法到达的点输出-1 数据范围:n<=1e5,z<=1e9 解法: 操...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 272

【线段树优化建图+最短路】Codeforces Round #406 (Div. 1) - B. Legacy

题目链接https://codeforces.com/problemset/problem/786/B 题意 一共有nnn个点,三种建边方式: 点uuu向点vvv建一条权值为www的边 点uuu到[l,r][l,r][l,r]内的点建一条权值为www的边 [l,r][l,r][l,r]内的点到点vvv建一条权值为www的边 一共要加mmm次边,问从点sss到所有点的最短路。1≤n,m≤1e5...

Eliot的博客 520
上一篇: hdu 5521 (虚点?优化建图最短路)
下一篇: 2019牛客暑期多校训练营(第四场)I string(后缀数组 + 回文树)
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值