BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS
BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS
Description
Input
Output
Sample Input
1 2 4 5
5 5 4 4
1 1 3 3
Sample Output
1
2
0
1
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 500050
#define M 4000050
int Q[M],tot,l,r,ls[N<<3],rs[N<<3];
int head[M][2],to[M<<2][2],nxt[M<<2][2],cnt,idx[N],n,m,a[N<<3],dis[M],rta,rtb,b[N<<3];
inline void add(int u,int v,int w) {
to[++cnt][w]=v; nxt[cnt][w]=head[u][w]; head[u][w]=cnt;
}
void build(int l,int r,int &p,int flg) {
p=++tot;
if(l==r) {
if(!flg) idx[l]=p;
else b[l]=p;
return ;
}
int mid=(l+r)>>1;
build(l,mid,ls[p],flg); build(mid+1,r,rs[p],flg);
if(!flg) {
add(ls[p],p,0); add(rs[p],p,0);
}else {
add(p,ls[p],0); add(p,rs[p],0);
}
}
void update(int l,int r,int x,int y,int p) {
if(x<=l&&y>=r) {
a[++a[0]]=p; return ;
}
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,y,ls[p]);
if(y>mid) update(mid+1,r,x,y,rs[p]);
}
void link(int x,int y,int z,int w) {
tot++;
update(1,n,x,y,rta);
int i;
for(i=1;i<=a[0];i++) add(a[i],tot,0); a[0]=0;
tot++; add(tot-1,tot,1);
update(1,n,z,w,rtb);
for(i=1;i<=a[0];i++) add(tot,a[i],0); a[0]=0;
}
void dfs(int x,int y) {
if(dis[x]) return ;
dis[x]=y;
Q[r++]=x;
int i;
for(i=head[x][0];i;i=nxt[i][0]) dfs(to[i][0],y);
}
int main() {
int S;int i,x,y,z,w;
scanf("%d%d%d",&n,&m,&S);
rta=0,rtb=0;
build(1,n,rta,0); build(1,n,rtb,1);
for(i=1;i<=n;i++) add(b[i],idx[i],0);
for(i=1;i<=m;i++) {
scanf("%d%d%d%d",&x,&y,&z,&w);
link(x,y,z,w); link(z,w,x,y);
}
dfs(idx[S],1);
while(l<r) {
x=Q[l++];y=dis[x]+1;
for(i=head[x][1];i;i=nxt[i][1]) dfs(to[i][1],y);
}
for(i=1;i<=n;i++) {
printf("%d\n",dis[idx[i]]-1);
}
}
BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS的更多相关文章
- 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra
题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...
- BZOJ3073: [Pa2011]Journeys(线段树优化建图 Dijkstra)
题意 \(n\)个点的无向图,构造\(m\)次边,求\(p\)到任意点的最短路. 每次给出\(a, b, c, d\) 对于任意\((x_{a \leqslant x \leqslant b}, y_ ...
- 7月13日考试 题解(DFS序+期望+线段树优化建图)
T1 sign 题目大意:给出一棵 N 个节点的树,求所有起点为叶节点的有向路径,其 上每一条边权值和的和.N<=10000 水题.考试的时候毒瘤出题人(学长orz)把读入顺序改了一下,于是很多 ...
- BZOJ5017 [SNOI2017]炸弹 - 线段树优化建图+Tarjan
Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. ...
- 【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流
[BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一 ...
- 【ARC069F】Flags 2-sat+线段树优化建图+二分
Description 数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input 第一行一个整数 N. 接下来 N 行每行两个整数 xi, ...
- 【bzoj5017】[Snoi2017]炸弹 线段树优化建图+Tarjan+拓扑排序
题目描述 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足: Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆. 现在 ...
- 【bzoj4699】树上的最短路(树剖+线段树优化建图)
题意 给你一棵 $n$ 个点 $n-1$ 条边的树,每条边有一个通过时间.此外有 $m$ 个传送条件 $(x_1,y_1,x_2,y_2,c)$,表示从 $x_1$ 到 $x_2$ 的简单路径上的点可 ...
- 【BZOJ4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
[BZOJ4276][ONTAK2015]Bajtman i Okrągły Robin Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2 ...
随机推荐
- python多线程(二)
原文:http://blog.sina.com.cn/s/blog_4b5039210100esc1.html 基础不必多讲,还是直接进入python. Python代码代码的执行由python虚拟机 ...
- oracle内核学习总结
http://blog.csdn.net/bcbobo21cn/article/category/3092145/1
- kafka-0.8.1.1总结
文件夹 一. 基础篇 1. 开篇说明 2. 概念说明 3. 配置说明 4. znode分类 5. kafka协议分类 6. Kafka线 ...
- jobject和jclass
jclass和jobject的迷惑第一次使用JNI,实例引用(jobject)和类引用(jclass)让人觉得很困惑.实例引用与一个数组和java.lang.Object类或它的子类的实例对应.类引用 ...
- Android四大组件的生命周期
介绍生命周期之前,先提一下任务的概念 任务其实就是activity 的栈它由一个或多个Activity组成的共同完成一个完整的用户体验, 换句话说任务就是” 应用程序” (可以是一个也可以是多个,比如 ...
- UVA 1356 - Bridge(自适应辛普森)
UVA 1356 - Bridge option=com_onlinejudge&Itemid=8&page=show_problem&category=493&pro ...
- 全文索引--自己定义chinese_lexer词典
本文来具体解释一下怎样自己定义chinese_lexer此法分析器的词典 初始化数据 create table test2 (str1 varchar2(2000),str2varchar2(2000 ...
- 标准C头文件
ISO C标准定义的头文件: POSIX标准定义的必须的头文件: POSIX标准定义的XSI可选头文件: POSIX标准定义的可选头文件:
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part III
A Tutorial on the Device Tree (Zynq) -- Part III 定义外设 可能你读本文是为了给你的设备写一个Linux驱动,在这方面要推荐著名的<Linux D ...
- Guava Cache在实际项目中的应用
对于Guava Cache本身就不多做介绍了,一个非常好用的本地cache lib,可以完全取代自己手动维护ConcurrentHashMap. 背景 目前需要开发一个接口I,对性能要求有非常高的要求 ...