正题

题目链接:https://www.luogu.com.cn/problem/P6348


题目大意

nnn个点的一张图,mmm条边表示区间[a,b][a,b][a,b]向区间[c,d][c,d][c,d]连边,求单源最短路。


解题思路

线段树优化建图的裸题,但是不能直接让线段树上的点两两建边,因为这样是log2nlog^2 nlog2n的显然空间顶不住。每条边多建立一个点就好了。

然后最短路可以用双端队列bfsbfsbfs但是这里还是写dijdijdij了,因为双端队列bfsbfsbfs写挂过两次。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define mp(x,y) make_pair(x,y)
using namespace std;
const int N=4e6+10;
struct node{int to,next,w;
}a[N<<2];
int n,m,s,num,tot,ls[N];
int q[N],p[N],f[N];bool v[N];
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot;return;
}
void Build(int x,int l,int r){if(l==r){q[x]=p[x]=l;return;}p[x]=++num;q[x]=++num;int mid=(l+r)>>1;Build(x*2,l,mid);Build(x*2+1,mid+1,r);addl(p[x],p[x*2],0);addl(p[x],p[x*2+1],0);addl(q[x*2],q[x],0);addl(q[x*2+1],q[x],0);return;
}
void Access(int x,int L,int R,int l,int r,int pos){if(L==l&&R==r){if(pos>0)addl(q[x],pos,1);else addl(-pos,p[x],0);return;}int mid=(L+R)>>1;if(r<=mid)Access(x*2,L,mid,l,r,pos);else if(l>mid)Access(x*2+1,mid+1,R,l,r,pos);else Access(x*2,L,mid,l,mid,pos),Access(x*2+1,mid+1,R,mid+1,r,pos);return;
}
void Dij(){memset(f,0x3f,sizeof(f));priority_queue<pair<int,int> >q;q.push(mp(0,s));f[s]=0;while(!q.empty()){int x=q.top().second;q.pop();if(v[x])continue;v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;q.push(mp(-f[y],y));}}}return;
}
int main()
{//  printf("%d",sizeof(a)/1024/1024);scanf("%d%d%d",&n,&m,&s);num=n;Build(1,1,n);for(int i=1;i<=m;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);++num;Access(1,1,n,a,b,num);Access(1,1,n,c,d,-num);++num;Access(1,1,n,c,d,num);Access(1,1,n,a,b,-num);}Dij();for(int i=1;i<=n;i++)printf("%d\n",f[i]);return 0;
}

P6348-[PA2011]Journeys【线段树优化建图,最短路】相关推荐

  1. P6348 [PA2011]Journeys 线段树优化建图 区间连区间

    传送门 文章目录 题意: 思路: 题意: 每次连接[a,b][a,b][a,b]与[c,d][c,d][c,d]之间所有点,让后跑最短路. 思路: 比普通的优化建图能简单点,我们只需要加两个虚点之间边 ...

  2. jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  3. cf 786 B 线段树优化建图

    cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照 ...

  4. 模板:线段树优化建图

    前言 百川到海,天下归一 解析 线段树优化建图是用于对一个区间的点连边时的优化方法 建一棵in树一棵出树分别往上和下指即可 大概长这样 (pia的洛谷的照片) 建树 正常动态开点即可 void bui ...

  5. [POI2015] Pustynia(差分约数,线段树优化建图,拓扑)

    传送门 Description 给定一个长度为n的正整数序列aaa,每个数都在111到10910^9109范围内,告诉你其中sss个数,并给出mmm条信息,每条信息包含三个数l,r,kl,r,kl,r ...

  6. CF786B Legacy 线段树优化建图

    洛谷题目链接 题意 首先想到单源最短路,但是如果暴力模拟就会导致从区间里每一个点连向另一个点时最坏情况时间复杂度达到O(N*N),显然会TLE.那么看到区间操作,自然会想到处理区间操作的数据结构,这一 ...

  7. 【BZOJ3073】[Pa2011]Journeys 线段树+堆优化Dijkstra

    [BZOJ3073][Pa2011]Journeys Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在 ...

  8. CodeForces - 787D - Legacy(线段树优化建图+最短路)

    题目链接:点击查看 题目大意:给出 nnn 个点和 mmm 条边,现在需要求从 ststst 开始到所有点的最短路是多少,mmm 条边的给出方式如下: 1uvw1 \ u \ v \ w1 u v w ...

  9. CodeForces---787D:Legacy【线段树优化建图+最短路】

    题目: 戳这里啊~~~ 题意: 给你三种操作:(1)点到点建边:(2)点到区间建边:(3)区间到点建边:最后求起点到其他点的最短距离 分析: 最短距离无非建边跑Dijkstra即可,考虑如何对区间建边 ...

最新文章

  1. 「AI白身境」究竟谁是paper之王,全球前10的计算机科学家
  2. 《编译原理》实验预习报告——递归下降语法分析器的构建
  3. spark的内存过小报错
  4. JS中NaN、null、Undefined区别
  5. C# 静态类和非静态类(实例类)
  6. Python nltk包
  7. 架构设计:负载均衡层设计方案(3)——Nginx进阶
  8. pg库和mysql的优缺点_MySQL与PostgreSQL的实际性能比较
  9. json文件内容+csv保存文件[Python]
  10. 传统武术家为什么看起来厉害?谈实战的重要性
  11. 【生信进阶练习1000days】day8-OrganismDb.dplyr包
  12. php 怎么判断月份最后一天_PHP基础案例三:判断学生星座
  13. 美国金融危机产生的原因
  14. 利用快速傅里叶计算多项式相乘
  15. dbm数据库详解【flask】【dbm.gun解决】
  16. Java改良贪吃蛇小游戏
  17. win10虚拟机搭建群晖nas碰到的一些问题
  18. PTMs-ALBERT
  19. c# OpenCvSharp 判断图片的是否黑白
  20. ISCSI linux/windows配置及使用

热门文章

  1. ios支付宝支付失败不回调_iOS 支付宝网页支付回调问题
  2. setresult()java_Java ResultSet getType()方法与示例
  3. php字符串赋值给变量,JavaScript-如何将一个PHP字符串安全赋值给Javascript变量(包含引号和换行符的)...
  4. phpsotrm怎么 搜索功能_Windows 10 网络搜索设计太反人类?教你如何彻底关闭它
  5. android websocket封装,Android WebSocket 方案选型OkHttp
  6. python 百度ai批量识别_Python基于百度AI的文字识别的示例
  7. linux下rip服务启动失败,RIP协议_linux系统管理与服务的技术博客_51CTO博客
  8. [Redis6]新数据类型_HyperLogLog
  9. [mybatis]缓存_缓存有关的设置以及属性
  10. Java面向对象编程(基础部分)