博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3073 : [Pa2011]Journeys
阅读量:4703 次
发布时间:2019-06-10

本文共 1377 字,大约阅读时间需要 4 分钟。

用线段树套链表维护所有边,用set维护未访问过的点

然后BFS,每次在线段树上找边,然后在set中查询点

一条边使用之后就没有用了,所以在链表中将它删去

时间复杂度$O((n+m)\log n+m\log^2n)$。

 

#include
#include
#include
#define N 500010using namespace std;int n,m,S,i,c,d,x2,y2,x,z,q[N],h,t,f[N],cnt,pos[N];struct Edge{int l,r;Edge*nxt;}*g[1048577],pool[9000000],*cur=pool,*p;set
T;set
::iterator y,tmp[N];inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}void build(int x,int a,int b){ if(a==b){pos[a]=x;return;} int mid=(a+b)>>1; build(x<<1,a,mid),build(x<<1|1,mid+1,b);}void ins(int x,int a,int b){ if(c<=a&&b<=d){ p=cur++,p->l=x2,p->r=y2,p->nxt=g[x],g[x]=p; return; } int mid=(a+b)>>1; if(c<=mid)ins(x<<1,a,mid); if(d>mid)ins(x<<1|1,mid+1,b);}int main(){ read(n),read(m),read(S); while(m--){ read(c),read(d),read(x2),read(y2),ins(1,1,n); swap(c,x2),swap(d,y2),ins(1,1,n); } build(1,1,n),q[h=t=1]=S; for(i=1;i<=n+1;i++)if(i!=S)T.insert(i); while(h<=t)for(z=f[x=q[h++]]+1,x=pos[x];x;g[x]=NULL,x>>=1)for(p=g[x];p;p=p->nxt){ for(cnt=0,y=T.lower_bound(p->l);*y<=p->r;y++)f[q[++t]=*y]=z,tmp[++cnt]=y; while(cnt)T.erase(tmp[cnt--]); } for(i=1;i<=n;i++)printf("%d\n",f[i]); return 0;}

  

转载于:https://www.cnblogs.com/clrs97/p/4595361.html

你可能感兴趣的文章
BST | 1043 BST树与镜像BST树的判断
查看>>
HTML5每日一练之input新增加的六种时间类型应用
查看>>
在自己的apple中展示App Store中产品使用KStoreProductViewController
查看>>
为ClickOnce部署的程序更新一个新的更新地址(Change the update URL for ClickOnce deployed application)...
查看>>
看看你的C语言到底什么水平吧
查看>>
搬寝室(动态规划)
查看>>
python实现域名解析和归属地查询
查看>>
利用expect验证主机口令
查看>>
Only one database connection at a time is supported
查看>>
JavaScript Date(日期)对象 实例
查看>>
office 2013 保存后 提示停止工作
查看>>
设计模式 -- 外观模式
查看>>
Codeforces Round #297 (Div. 2)
查看>>
反射 - 通过反射机制访问私有成员变量
查看>>
第二百七十八天 how can I 坚持
查看>>
dd相关命令
查看>>
下载Android源码出现的问题
查看>>
关于函数指针
查看>>
CentOS7部署Nginx
查看>>
TStream实现多表提交
查看>>