bzoj3073: [Pa2011]Journeys

链接

BZOJ

思路

区间和区间连边。如何线段树优化建图。

和单点连区间类似的,我们新建一个点,区间->新点->区间。

又转化成了单点连区间的了。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e6+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,q,S,dis[N];
struct node {
int v,nxt,q;
}G[N<<3];
int head[N<<2],tot,cnt;
void add(int u,int v,int q,int opt) {
if(opt) swap(u,v);
G[++tot].v=v;
G[tot].q=q;
G[tot].nxt=head[u];
head[u]=tot;
}
struct seg {
#define ls rt<<1
#define rs rt<<1|1
int id[N<<3];
void build(int l,int r,int rt,int opt) {
if(l==r) return id[rt]=l,void();
id[rt]=++cnt;
int mid=(l+r)>>1;
build(l,mid,ls,opt);
build(mid+1,r,rs,opt);
add(id[rt],id[ls],0,opt);
add(id[rt],id[rs],0,opt);
}
void modify(int L,int R,int u,int q,int l,int r,int rt,int opt) {
if(L<=l&&r<=R) return add(u,id[rt],q,opt);
int mid=(l+r)>>1;
if(L<=mid) modify(L,R,u,q,l,mid,ls,opt);
if(R>mid) modify(L,R,u,q,mid+1,r,rs,opt);
}
}a,b;
struct edge {
int id;
int val;
edge(int a=0,int b=0) {id=a,val=b;}
bool operator < (const edge &b) const {
return val>b.val;
}
};
priority_queue<edge> Q;
void dij() {
memset(dis,0x3f,sizeof(dis));
dis[S]=0;
Q.push(edge(S,0));
while(!Q.empty()) {
edge u=Q.top();
Q.pop();
if(dis[u.id]!=u.val) continue;
for(int i=head[u.id];i;i=G[i].nxt) {
int v=G[i].v;
if(dis[v]>dis[u.id]+G[i].q) {
dis[v]=dis[u.id]+G[i].q;
Q.push(edge(v,dis[v]));
}
}
}
}
int main() {
n=cnt=read(),q=read(),S=read();
a.build(1,n,1,0);
b.build(1,n,1,1);
for(int i=1;i<=q;++i) {
int x=read(),y=read(),l=read(),r=read();
++cnt;
a.modify(x,y,cnt,1,1,n,1,0);
b.modify(l,r,cnt,1,1,n,1,1);
++cnt;
a.modify(l,r,cnt,1,1,n,1,0);
b.modify(x,y,cnt,1,1,n,1,1);
}
dij();
for(int i=1;i<=n;++i) printf("%d\n",dis[i]/2);
return 0;
}

bzoj3073: [Pa2011]Journeys 线段树优化建图的更多相关文章

  1. BZOJ3073: [Pa2011]Journeys(线段树优化建图 Dijkstra)

    题意 \(n\)个点的无向图,构造\(m\)次边,求\(p\)到任意点的最短路. 每次给出\(a, b, c, d\) 对于任意\((x_{a \leqslant x \leqslant b}, y_ ...

  2. BZOJ 3073: [Pa2011]Journeys Dijkstra+线段树优化建图

    复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边. #include <bits/stdc++.h ...

  3. 【BZOJ4383】[POI2015]Pustynia 线段树优化建图

    [BZOJ4383][POI2015]Pustynia Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r ...

  4. AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图

    AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...

  5. loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点

    loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...

  6. bzoj4383 [POI2015]Pustynia 拓扑排序+差分约束+线段树优化建图

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4383 题解 暴力的做法显然是把所有的条件拆分以后暴力建一条有向边表示小于关系. 因为不存在零环 ...

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

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  8. BZOJ 4276 [ONTAK2015]Bajtman i Okrągły Robin 费用流+线段树优化建图

    Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]这么多段长度为1时间中选出一个时间进行抢劫,并计划抢 ...

  9. codeforces 787D - Legacy 线段树优化建图,最短路

    题意: 有n个点,q个询问, 每次询问有一种操作. 操作1:u→[l,r](即u到l,l+1,l+2,...,r距离均为w)的距离为w: 操作2:[l,r]→u的距离为w 操作3:u到v的距离为w 最 ...

随机推荐

  1. 显示 Uncaught TypeError: Cannot read property 'dialog' of undefined”的错误解决方法

    最近在做一个基于easyUI的列表,新增功能的弹出框是以这样的方式: 运行测试的时候,报了这一堆的错误Uncaught TypeError: Cannot read property 'dialog' ...

  2. docker离线导入导出镜像

    docker save -o mysqlies.tar 5ada6380f248(镜像id)    # 镜像id是要导出的 有镜像的机器  在有镜像的机器上执行docker load --input ...

  3. List泛型用法(转载)

    网上的List泛型用法,未验证,目测基本正确,教学用资料. 1.  List的基础.常用方法: 声明: 1.List<T> mList = new List<T>(); T为列 ...

  4. 面向对象——组合、封装、访问限制机制、property内置装饰器

    面向对象--组合.封装.访问限制机制.property 组合 什么是组合? 组合指的是一个对象中,包含另一个或多个对象 为什么要组合? 减少代码的冗余 怎么用组合? # 综合实现 # 父类 class ...

  5. 前端1-----A标签 (锚点)

    Title 头部,顶端, 点击跳转到id='abc' 1 2 到百度这里,点击跳转百度 3 到这里了 4 alex1 5 6 根据id 从底部到头      根据id='a1' 到指定位置      ...

  6. Mybatis架构与原理

    一.简介 MyBatis 是一款优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码 ...

  7. vector中的push_back函数的意思是什么

    push_back   就是在vector的末尾插入一个元素, vector 中的erase()函数,从指定容器删除指定位置的元素或者某段范围内的元素,删除之后,返回值也是一个迭代器,指向最后一个删除 ...

  8. code_demo 用随机森林做缺失值预测

    直接上代码 在做特征工程的时候, 其实可以用算法来处理特征工程的, 比如缺失值填充之类的. 这里一段code_demo是搬运来的, 不过是真滴好用呢. # RandomForest - 强化, 对 n ...

  9. LINUX基础学习之基础命令(3)--2019-11-22

    1.命令行展开   ~ USERNAME:展开用户的主目录 [root@CentOS-7-43 ~]# ls ~roo 公共 模板 视频 图片 文档 下载 音乐 桌面 {}:可承载一个以逗号分隔的列表 ...

  10. Centos6.5基于GPT格式磁盘分区

    1.查看分区 fdisk -l 2.设置分区类型未gpt格式. parted -s /dev/sdb mklabel gpt 3.基于ext3文件系统类型格式化. mkfs.ext3 /dev/sdb ...