bzoj3073: [Pa2011]Journeys 线段树优化建图
bzoj3073: [Pa2011]Journeys
链接
思路
区间和区间连边。如何线段树优化建图。
和单点连区间类似的,我们新建一个点,区间->新点->区间。
又转化成了单点连区间的了。
代码
#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 线段树优化建图的更多相关文章
- BZOJ3073: [Pa2011]Journeys(线段树优化建图 Dijkstra)
题意 \(n\)个点的无向图,构造\(m\)次边,求\(p\)到任意点的最短路. 每次给出\(a, b, c, d\) 对于任意\((x_{a \leqslant x \leqslant b}, y_ ...
- BZOJ 3073: [Pa2011]Journeys Dijkstra+线段树优化建图
复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边. #include <bits/stdc++.h ...
- 【BZOJ4383】[POI2015]Pustynia 线段树优化建图
[BZOJ4383][POI2015]Pustynia Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r ...
- AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图
AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...
- loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点
loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...
- bzoj4383 [POI2015]Pustynia 拓扑排序+差分约束+线段树优化建图
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4383 题解 暴力的做法显然是把所有的条件拆分以后暴力建一条有向边表示小于关系. 因为不存在零环 ...
- 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra
题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...
- 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时间中选出一个时间进行抢劫,并计划抢 ...
- 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 最 ...
随机推荐
- laravel5.4 中 dd和dump的区别。
在laravel中dd和dump 都是打印的数据的,但是 dd会终止程序的运行,dump不会. 而且dump打印出来的数据在浏览器上是高亮的哦(很有逼格的~). 上图为dump打印出来的. 上图为dd ...
- “分而治之”,一种AI和动画系统的架构
译者注:随着国内游戏研发水平的不断提高,对画面品质的不断提升,同时大量手游使用Unity和Unreal 4等成熟的工具开发,动作状态机已经不是什么陌生的概念了.我们在项目开发时也大量使用了动作状态机. ...
- .Net Core 程序集管理说明(加载)
.NET CORE 的程序集加载管理和以前的 .NET 发生了很大的变化, 在 .NET CORE 里, 程序集的加载, 依赖了 xx.deps.json 文件, deps.json 文件里,定义了程 ...
- xcode11新项目删除main.storyboard 两种方法
方法一 心急的童鞋按照老操作完成后再按照如下操作即可 /** 弃用storboard 1.info.plist去除 <key>UIApplicationSceneManifest</ ...
- Nginx 开启status用以监控状态信息
Nginx 可以通过with-http_stub_status_module模块来监控nginx的一些状态信息.1.通过nginx -V来查看是否有with-http_stub_status_modu ...
- vector中的push_back函数的意思是什么
push_back 就是在vector的末尾插入一个元素, vector 中的erase()函数,从指定容器删除指定位置的元素或者某段范围内的元素,删除之后,返回值也是一个迭代器,指向最后一个删除 ...
- Android Scroller简单用法实例
Android里Scroller类是为了实现View平滑滚动的一个Helper 类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(cont ...
- service基础概念和操作
sevice概念介绍 service的实现强烈依赖于kube-DNS组件 新版本k8s安装的是core-DNS 因为每个pod是有生命周期的 为了给客户端访问pod提供一个固定的访问端点 servic ...
- idea中导入Maven项目,但是没有Maven Dependencies,且没有pom
1. 可以复制其他项目的类似的pom.xml文件复制到当前项目下 2. 导入此项目为maven项目 3. 配置相应的maven环境 4. 如果此时的Application.class中的main方法没 ...
- 92. 反转链表 II.反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
public ListNode reverseBetween(ListNode head, int m, int n) { ListNode dummy = new ListNode(0); //虚拟 ...