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 ...
随机推荐
- js判断手机的横竖屏调整样式
在移动端,我们经常遇到横竖屏的问题,所以我们改如何判断或针对横竖屏来写代码呢.首先需要在head中加入如下代码: <meta name="viewport" content= ...
- codevs——1501 二叉树最大宽度和高度
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 给出一个二叉树,输出它的 ...
- Codechef Yet another cute girl
题意大概就是让你求一下[L,R]中的约数个数是素数的数的个数. 其中1<=L<=R<=1e12,R-L<=1e6. 然后我写了两种做法,第一种是可以直接搞出来L-R的约数个数, ...
- C++字符串转数字,数字转字符串
1. 字符串转数字 如将"32"转为32,将"3.1415"转为3.1415,将"567283"转为567283.使用: //Convert ...
- ubuntu 添加和删除用户
Without a home directory sudo useradd myuser With home directory sudo useradd -m myuser Then set the ...
- STL源代码分析--deque
一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却仅仅能向尾端成长.并且其 ...
- 与linux相处的日子里
在前几天装了一下linux操作系统,并安装了几个经常使用的工具.如今就谈谈我的感受吧! 对一个连linux几个字母都不会拼写的人来说.让我參与这个工作可谓是:"太残忍啦!"当然这在 ...
- 【试水CAS-4.0.3】第06节_CAS服务端配置HTTPS
完整版见https://jadyer.github.io/2012/05/30/tomcat-https/ /** * @see CAS服务端配置HTTPS * @see -------------- ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
- [原创] 在线音乐API的研究 (Part 2.1)
最近,在优化一个自己写的音乐播放器.主要目的是回顾.归纳,并希望能够写出一个属于自己的common lib.今天,主要是关于在线音乐API的一些分析结果.此次,主要分析的是歌词.专辑部分.在线搜索音乐 ...