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.

*/

用C++手把手教你连接SimNow期货模拟盘:从CTP API封装到第一个订单(附完整代码) 本文详细介绍了如何使用C++连接SimNow期货模拟盘,从CTP API的基础架构解析到实现第一个订单的完整流程。内容涵盖CTP API的封装、SimNow环境配置、交易通道实现、行情接收与处理等核心环节,并提供完整代码示例,帮助开发者快速掌握量化交易中的期货模拟盘连接技术。 阅读详情

相关推荐

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

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

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

七九河开的博客 353

大模型量化技术全解析:从INT8到GPTQ/AWQ,降低部署成本实战指南

模型量化是一种通过降低神经网络权重和激活值的数据精度(如从FP16降至INT8/INT4),从而大幅减少模型内存占用和计算开销的核心模型压缩技术。其原理基于线性变换,将高精度浮点数映射到低精度整数表示,在硬件层面能利用专用低精度计算单元实现显著加速。这项技术的核心价值在于解决了大模型(如千亿参数LLM)部署时面临的高昂显存成本和推理延迟问题,使其能在消费级GPU和边缘设备上高效运行。当前,后训练量化(PTQ)因其无需重新训练的特性成为主流,衍生出GPTQ、AWQ、SmoothQuant等多种方法,广泛应用于

weixin_33804582的博客 630

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

西门子AI面试问答(STAR法则回答实例)

通过建立良好的沟通渠道、倡导透明和积极的沟通,并建立信任和共享目标的文化,我成功地改善了团队合作的氛围和效果。对于一些存在分歧和冲突的情况,我采用了积极的解决问题的态度,促进双方的沟通和理解,寻找共同的利益点和解决方案。我的成果得到了评委和观众的认可,并为我的学术发展和进一步的科学研究奠定了基础。首先,我主动与团队成员进行一对一的沟通,倾听他们的观点和意见,了解他们在合作中遇到的问题和需求。我还参加了学校组织的科学俱乐部和研究小组,与其他热衷科学的同学一起进行讨论和实验,加深我的理解和实践技能。

kashine的博客 7249

AMEsim不连续处理机制:仿真精度与效率的平衡艺术

本文深入解析AMEsim不连续处理机制在系统仿真中的应用,探讨如何平衡仿真精度与效率。通过液压系统仿真案例,详细介绍了事件检测算法、变步长求解器自适应策略及典型场景优化方法,帮助工程师有效应对仿真中的不连续性问题,提升仿真效率和准确性。

v4w5x6的博客 440

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

RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ?

1.独立运行的分散结构 2.简化实现,容忍部分数据不一致 Proxy:多语言支持、简化开发 Controller: 提高 Broker 的性能 Container:提高资源利用率,平衡负载

xaiobit_hl的博客 1489

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

24. 在QML界面中嵌入QWidget窗口

目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWidget框架进行实现。

山间点烟雨 5921

2024.12.29 【RNA-seq】Rawdata数据缺失问题与解决方案

Fastq格式是一种用于存储高通量测序数据的文件格式,包含序列和相应的质量信息。第一行以开头,后接序列标识符;第二行是测序的DNA序列;第三行以开头,可能会跟随序列标识符;第四行是对应的质量值,以ASCII字符表示。Rawdata的数据完整性通常情况下是没有问题的,但我们仍然需要对下机数据进行验证,确保后续分析的正常进行,好的分析习惯可以提高整体的分析效率,避免很多不必要的麻烦。

1111

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

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

蒟蒻的最后的倔强 445

YOLOv11改进策略【模型轻量化】| 使用 MoblieOne 模块,引入结构重参数化,提高模型检测效率

本文记录的是基于MobileOne的YOLOv11骨干网络改进方法研究。MobileOne的基础模块通过重参数化,。在将其替换YOLOv11的骨干网络后,实现模型轻量化。

Limiiiing的博客 1424

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

weixin_30825199的博客 110

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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、付费专栏及课程。

余额充值