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. eclipse从svn检出maven项目

    使用Eclipse从svn检出项目. 打开Eclipse,在project explorer空白区域右键鼠标移至import选择import. 2 之后选择svn-->从svn检出项目,然后输入 ...

  2. 对Apache2进行简单配置

    Apache2 1.安装Apache2 sudo apt-get update sudo apt-get install apache2 2.启动服务 sudo /etc/init.d/apache2 ...

  3. 03、新手必须掌握的Linux命令

    Ⅰ. 常用系统工作命令 1. echo 命令 echo命令用于在终端输出字符串货变量提取后的值,格式为"echo [字符串 | $变量]" 例:把指定字符串"LinxuH ...

  4. Java自学-异常处理 Exception

    Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...

  5. ip2region.jar实现ip转地址

    ip转地址 根据ip地址查询出所在地址. GitHub地址 https://github.com/lionsoul2014/ip2region/ pom坐标 <dependency> &l ...

  6. vue与webpack开发环境搭建:从无到有

    一个vue从无到有的搭建过程. 一.不论是webpack还是vue,最初的第一步就是安装node.js.它是基石. 从官网下载你需要的安装包:官网下载链接:http://nodejs.cn/downl ...

  7. Apache Hive

    1.Hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 本质是将SQL转换为MapReduce程序. 主要用途:操作接口采用 ...

  8. Jmeter CSV参数带汉字处理

    问题1:请求参数中有汉字,在windows上调测压测没有问题,直接把参数文件上传到linux 服务器上进行分布式压测时发现参数取出后为乱码,linux上后台查看文件也是乱码 处理方法: 初步想到是因为 ...

  9. GitPython模块

    GitPython模块 安装: pip3 install gitpython Gitpython 操作 import os from git.repo import Repo import json ...

  10. Log4j配置详述

    /** * log4j基础配置步骤阐述: * 1.引入log4j相关的jar包文件. * 2.创建log4j的配置文件.      * 3.测试配置是否成功. */ Log4j 根配置语法 下面引入一 ...