Legacy(线段树优化建边跑Dijkstra)

Legacy

线段树优化建边,开两颗线段树:
对于线段树1,自顶向下连边。对于线段树2,自底向上连边。
然后对于op1我们直接连边即可。
对于op2(u -> [l, r] cost = w),这个操作在线段树1上完成即可。
对于op3([l, r] -> v cost = w),这个操作在线段树2上完成即可。
最后跑一遍Dijkstra最短路即可。

/*Author : lifehappy
*/
#include <bits/stdc++.h>
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;const int N = 2e6 + 10;int n, m, s, tree1[N], tree2[N], tot;int head[N], to[N], nex[N], value[N], vis[N], cnt = 1;ll dis[N];void add(int x, int y, int w) {to[cnt] = y;nex[cnt] = head[x];value[cnt] = w;head[x] = cnt++;
}int build1(int rt, int l, int r) {if(l == r) {return tree1[rt] = l;}tree1[rt] = ++tot;int lid = build1(lson);int rid = build1(rson);add(tree1[rt], lid, 0);add(tree1[rt], rid, 0);return tree1[rt];
}int build2(int rt, int l, int r) {if(l == r) {return tree2[rt] = l;}tree2[rt] = ++tot;int lid = build2(lson);int rid = build2(rson);add(lid, tree2[rt], 0);add(rid, tree2[rt], 0);return tree2[rt];
}void add1(int rt, int l, int r, int u, int L, int R, int w) {if(l >= L && r <= R) {add(u, tree1[rt], w);return ;}if(L <= mid) add1(lson, u, L, R, w);if(R > mid)  add1(rson, u, L, R, w);
}void add2(int rt, int l, int r, int v, int L, int R, int w) {if(l >= L && r <= R) {add(tree2[rt], v, w);return ;}if(L <= mid) add2(lson, v, L, R, w);if(R > mid)  add2(rson, v, L, R, w);
}typedef pair<ll, int> pli;priority_queue<pli, vector<pli>, greater<pli> > q;void Dijkstra() {memset(dis, 0x3f, sizeof dis);dis[s] = 0;q.push(make_pair(0, s));while(q.size()) {int temp = q.top().second;q.pop();if(vis[temp]) continue;vis[temp] = 1;for(int i = head[temp]; i; i = nex[i]) {if(dis[to[i]] > dis[temp] + value[i]) {dis[to[i]] = dis[temp] + value[i];q.push(make_pair(dis[to[i]], to[i]));}   }}for(int i = 1; i <= n; i++) {printf("%lld%c", dis[i] == 0x3f3f3f3f3f3f3f3f ? -1 : dis[i], i == n ? '\n' : ' ');}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);scanf("%d %d %d", &n, &m, &s);tot = n;build1(1, 1, n);build2(1, 1, n);for(int i = 1; i <= m; i++) {int op, x, y, l, r, w;scanf("%d", &op);if(op == 1) {scanf("%d %d %d", &x, &y, &w);add(x, y, w);}else if(op == 2) {scanf("%d %d %d %d", &x, &l, &r, &w);//x -> [l, r] cost w.add1(1, 1, n, x, l, r, w);}else {scanf("%d %d %d %d", &x, &l, &r, &w);//[l, r] -> x cost w.add2(1, 1, n, x, l, r, w);}}Dijkstra();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P5273 【模板】多项式幂函数 (加强版)

P5273 【模板】多项式幂函数 (加强版) 这道题和原来的题目唯一区别就在于这道题没有限制F[0]1&#xff0c;所以我们就不能直接取ln了&#xff0c;但是我们实际上有办法转换一下&#xff0c;让它最低次项为1&#xff0c;只需要除以最后一个非0项即可&#xff0c;然后最后再乘回…

给 asp.net core 写个中间件来记录接口耗时

给 asp.net core 写个中间件来记录接口耗时Intro写接口的难免会遇到别人说接口比较慢&#xff0c;到底慢多少&#xff0c;一个接口服务器处理究竟花了多长时间&#xff0c;如果能有具体的数字来记录每个接口耗时多少&#xff0c;别人再说接口慢的时候看一下接口耗时统计&#x…

2019-03-1-算法-进化(整数转罗马数字)

题目描述 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

brz的函数(mobius)

brz的函数 ∑i1n∑j1nμ(ij)假设i,j不互质&#xff0c;一定有μ(ij)0所以上式∑i1n∑j1nμ(ij)[gcd(i,j)1]积性函数性质有μ(ij)μ(i)μ(j)∑i1n∑j1nμ(i)μ(j)[gcd(i,j)1]∑i1n∑j1nμ(i)μ(j)∑d∣gcd(i,j)μ(d)这里我们按照套路把d给提前去&#xff0c;因为i,j都要是d的倍数…

CF1251F Red-White Fence(多项式/背包问题/组合数学)

CF1251F Red-White Fence 现在给出了n个白板&#xff0c;m个红板&#xff0c;然后将其按照题目要求放成一排&#xff0c;要求最终周长为qi的方案数。 首先因为有高度的单调性&#xff0c;所以我们可以直接把周长转化为红板的高度和白板的数量&#xff0c;然后因为红板数量很少…

Java修炼之路——基础篇——枚举

枚举的用法 每个枚举变量其实都是枚举类的一个实例。 枚举与单例 各种模式的单例模式&#xff0c;包括枚举实现的单例 //懒汉模式 class SingletonA {private static SingletonA instance new SingletonA();//保证不能通过new SingletonB的方式创建对象private SingletonA()…

Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

一、前言【查看完整视频教程&#xff08;免费&#xff09;&#xff0c;请拉直文尾】在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中&#xff0c;我们将继续介绍利用Docker部署Nginx服务实现负载均衡。文章最后…

HDU 6127 Hard challenge(极角 + 二分)

Hard challenge 思路 通过极角排序&#xff0c;这里通过修改后&#xff0c;所有点的角度在[0,2π)[0, 2 \pi)[0,2π)之间&#xff0c; 然后O(n)O(n)O(n)扫一趟&#xff0c;对当前在的级角加上π\piπ就是我们要找的角度了&#xff0c;这里通过二分来实现查找。 接下来就只要…

P2664 树上游戏(点分治/计数题计算贡献/树上差分)

P2664 树上游戏 对于树上n个点&#xff0c;每个点有不同颜色&#xff0c;求解每个点到其他点的路径上不同颜色个数之和。 首先看到这种树上点对问题&#xff0c;我们可以想到点分治&#xff0c;然后考虑每次分治如何求解答案&#xff0c;本质上就是一个数颜色的问题&#xff…

2019-03-4-算法-进化(罗马数字转整数)

题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如…

设置ABP默认使用中文

ABP提供的启动模板, 默认使用是英文:虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.前期准备使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:abp new AbpStudy关于MVC的启动模板可以看文档, 这里就不赘述.使用ABP版本的是当前最新…

P3835 【模板】可持久化平衡树

P3835 【模板】可持久化平衡树 好久没有打平衡树了&#xff0c;赶紧来复习一下&#xff0c;平衡树这种东西还是很有用的&#xff0c;可以很灵活地解决一些问题。 fhq_treap 这道题是可持久化的权值平衡树&#xff0c;支持以下几个操作 1、 插入 xxx 2、 删除 xxx&#xff08…

基础篇--Java IO--概览

字符流、字节流、输入流、输出流 Java 中使用IO&#xff08;输入输出&#xff09;来读取和写入&#xff0c;读写磁盘文件、内存、网络数据。输入输出是相对内存而言&#xff0c;往内存中读数据就为输入流&#xff0c;从内存中往外写就是输出流。 根据处理类型分为字符流、字节…

半平面交练习(计算几何)

四&#xff1a;半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <iostream>using namespace std;const double pi ac…

.NET轻松写博客园爬虫

爬虫&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网站的程序或者脚本。.NET写爬虫非常简单&#xff0c;并能轻松优化性能。今天我将分享一段简短的代码&#xff0c;爬出博客园前200页精华内容&#xff0c;然后通过微小的改动&#xff0c;将代码升级为多线程爬虫&am…

P5055 【模板】可持久化文艺平衡树

P5055 【模板】可持久化文艺平衡树 突然发现fhq_treap也是可以支持区间翻转的&#xff0c;所以基本上和其他平衡树是一样的&#xff0c;而且还满足重量平衡树的性质&#xff0c;真是太优秀了&#xff0c;只不过常数稍微比较大。 然后这里我们变成了一颗区间平衡树&#xff0c…

kettle同步数据中文乱码问题解决

最近在使用kettle进行数据同步的时候&#xff0c;发现同步来的中文数据产生了乱码。试了下网上的解决方案&#xff0c;最终解决了这个问题。步骤如下&#xff1a; 1&#xff1a;kettle中配置源数据库、目标数据库编码 2&#xff1a;编辑“表输入”&#xff0c;去掉勾选“允许建…

WTM重磅更新,LayuiAdmin免费用 and more

从善如登&#xff0c;从恶如崩。对于一个开发人员来说&#xff0c;那就是做一个好的系统不容易&#xff0c;想搞砸一个系统很简单&#xff0c;删库跑路会还不会么。对于我们开源框架的作者来说&#xff0c;做一个好的框架就像登山&#xff08;也许是登天&#xff09;&#xff0…

Lady Layton with Math(杜教筛)

Lady Layton with Math ∑i1n∑j1nϕ(gcd(i,j))∑d1nϕ(d)∑i1n∑j1n[gcd(i,j)d]∑d1nϕ(d)∑i1nd∑j1nd[gcd(i,j)1]∑d1nϕ(d)(2∑i1nd∑j1i[gcd(i,j)1]−1)∑d1nϕ(d)(2∑i1ndϕ(i)−1)\sum_{i 1} ^{n} \sum_{j 1} ^{n} \phi(gcd(i, j))\\ \sum_{d 1} ^{n} \phi(d) \sum_{…

概率期望复习

概率期望 P(A并B)P(A)P(B)-P(A交B) 条件概率 已知A发生B发生的概率&#xff0c;记作P(B|A) 四种情况 P(AB都发生)a,P(AB都不发生)b P(只有A发生)c,P(只有B发生)d P(B|A)a/(ac),即P(B|A)P(AB)/P(A) 全概率公式 P(A)P(B1)P(A|B1)…P(Bn)P(A|Bn) 三门问题 生日悖论 贝叶斯…