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 ...
随机推荐
- (11)UML设计视图
UML的词汇表包含三种构造块:事物.关系和图 事物:事物是对模型中最具有代表性的成分的抽象 关系:把事物结合在一起 图:图聚集了相关的事物 一.事物 UML中有4种事物 (1)结构事物 UML 模型中 ...
- DBCP,C3P0与Tomcat jdbc pool 连接池的比较
hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置 ...
- Container With Most Water 双指针法
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- Codeforces 514C Watto and Mechanism(字典树)
题目链接 Watto and Mechanism 题意 给出$n$个串(相当于字典),然后给出$m$个询问. 每个询问以字符串的形式给出,你需要改变这个字符串中的任意一个字符 (必须改变且只能改变 ...
- HDU_4770 Lights Against Dudely 状压+剪枝
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4770 Lights Against Dudely Time Limit: 2000/1000 MS ( ...
- 《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- ganglia-monitoring-centos-linux
http://www.tecmint.com/install-configure-ganglia-monitoring-centos-linux/ http://monitor.gitlab.net/ ...
- Dubbo简单介绍及实例
1.概念 Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架.其功能主要包含:高性能NIO通讯及多协议集成.服务动态寻址与路由.软负载均衡与容错,依赖分析与降级等. 说通 ...
- 一个能自己主动搜索源文件并自己主动推导的Makefile
今天看了一天的makefile的写法.东拼西凑.好不easy写出了一个makefile.颇有成就感,记录下来,以备温习之用. 如果有两个头文件文件夹 header1,header2;两个cpp文件文件 ...
- 简谈Java的join()方法(转)
join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...