3073: [Pa2011]Journeys|线段树|BFS
来源:互联网 发布:stl源码剖析 知乎 编辑:程序博客网 时间:2024/05/21 10:52
一种比较暴力的方法就是直接线段树优化建图,跑
但是这题的边权都是
首先按照
这样每次询问一个点
因为已经按照
#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<cmath>#include<queue>#include<ctime>#include<set>#include<map>#define N 500020#define inf 1e9#define pa pair<int,int>using namespace std;int sc(){ int i=0; char c=getchar(); while(c>'9'||c<'0')c=getchar(); while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i;}struct W{int x,y,l,r,z;}a[N];int dis[N],q[N],fa[N],mark[N];int head[N*10],nxt[N*10],lst[N*10];int n,m,s,l,r,tot;bool cmp(W a,W b){ return a.y<b.y;}void insert(int x,int y){ lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;}int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}void change(int x,int L,int R,int p,int num){ insert(x,num); if(L==R)return; int mid=L+R>>1; if(p<=mid) change(x<<1,L,mid,p,num); else change(x<<1|1,mid+1,R,p,num);}void cal(int x,int d){ if(a[x].z)return;a[x].z=1; for(int i=a[x].l;i<=a[x].r;i=find(i)) { if(!mark[i]) { mark[i]=1; q[++r]=i; dis[i]=d+1; } fa[i]=i+1; }} void solve(int x,int L,int R,int p){ if(p>=R) { for(;a[lst[head[x]]].y>=p;head[x]=nxt[head[x]]) cal(lst[head[x]],dis[p]); return; } int mid=L+R>>1; solve(x<<1,L,mid,p); if(p>mid)solve(x<<1|1,mid+1,R,p);}int main(){ n=sc(),m=sc(),q[1]=sc(); for(int i=1;i<=m;i++) { ++s; a[s+1].l=a[s].x=sc(); a[s+1].r=a[s].y=sc(); a[s+1].x=a[s].l=sc(); a[s+1].y=a[s].r=sc(); ++s; } sort(a+1,a+s+1,cmp); for(int i=1;i<=s;i++) change(1,1,n,a[i].x,i); mark[q[l=r=1]]=1; for(int i=1;i<=n;i++)fa[i]=i; fa[n+1]=n+1; for(;l<=r;l++) solve(1,1,n,q[l]); for(int i=1;i<=n;i++) printf("%d\n",dis[i]); return 0;}
0 0
- 3073: [Pa2011]Journeys|线段树|BFS
- [线段树优化建图最短路 bfs] BZOJ 3073 [Pa2011]Journeys
- 【线段树优化建图+BFS】BZOJ3073(Pa2011)[Journeys]题解
- BZOJ 3073: [Pa2011]Journeys 线段树优化最短路
- bzoj 3073: [Pa2011]Journeys
- bzoj 3073: [Pa2011]Journeys 线段树优化建图+堆优化dij
- BZOJ 3073 [Pa2011]Journeys 最短路 线段树优化建图
- 【线段树优化建图+最短路】BZOJ3073 [Pa2011]Journeys
- [bzoj3073][Pa2011]Journeys 线段树优化建边的最短路
- 【PA2011】【BZOJ3073】Journeys
- BZOJ3073:Journeys(线段树)
- 微软大楼设计方案 bfs和线段树
- [bzoj3073]Journeys
- 【PA2011】Kangaroos
- poj 3162 线段树 hdu 4123 bfs + RMQ预处理
- poj 3162 线段树 hdu 4123 bfs + RMQ预处理
- [bfs序 线段树] HDU5957. Query on a graph
- 【BZOJ】4130: [PA2011]Kangaroos【KD树——最长连续1的子段长度】
- 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD
- 在caffe上跑自己的数据
- java多线程之批量操作
- nm命令
- 性能测试--Spotlight
- 3073: [Pa2011]Journeys|线段树|BFS
- ava.lang.OutOfMemoryError: Java heap space 的快速解决办法
- session与cookie的区别
- 获取当前应用版本号
- win7使用telnet
- 自动化测试--Jenkins
- arm7的问题
- Java-控制流语句
- Android文本排版实现