[最短路] HDU 5910 Advanced Traffic System
来源:互联网 发布:扩大朋友圈 知乎 编辑:程序博客网 时间:2024/06/05 05:14
理解了有一会儿,但是题解确实说清楚了
关键是只需要更新一遍
#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<queue>#define pb push_backusing namespace std;typedef pair<int,int> abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=90005;vector<int> q[N<<2],f[N<<2]; int size[N<<2];inline int Fatq(int x,int u){ return f[x][u]==u?u:f[x][u]=Fatq(x,f[x][u]);}int pos[N];inline void Build(int x,int l,int r){ q[x].clear(); f[x].clear(); q[x].pb(0); f[x].pb(0); size[x]=0; if (l==r) return void(pos[l]=x); int mid=(l+r)>>1; Build(x<<1,l,mid); Build(x<<1|1,mid+1,r);}inline void Add(int x,int l,int r,int ql,int qr,int t){ if (ql<=l && r<=qr){ q[x].pb(t); f[x].pb(++size[x]); return; } int mid=(l+r)>>1; if (ql<=mid) Add(x<<1,l,mid,ql,qr,t); if (qr>mid) Add(x<<1|1,mid+1,r,ql,qr,t);}priority_queue<abcd,vector<abcd>,greater<abcd> > Q;int dis[N];int fat[305][305];inline int Fat(int x,int y){ return fat[x][y]==y?y:fat[x][y]=Fat(x,fat[x][y]);}int vst[N];int n,m,e,sx,sy;int L[N],R[N],A[N],B[N],dx[N],C[N],D[N],dy[N],w[N];int idx[305][305];inline void Modify(int x,int d){ x=pos[x]; while (x){ for (int i=Fatq(x,size[x]);i;i=Fatq(x,i)){ int t=q[x][i]; if (!vst[t]) Q.push(abcd(d+w[t],t)),vst[t]=1; f[x][i]=i-1; } x>>=1; }}inline void Dij(){ while (!Q.empty()) Q.pop(); dis[idx[sx][sy]]=0; Modify(idx[sx][sy],0); fat[sx][sy]=sy+1; while (!Q.empty()){ abcd t=Q.top(); Q.pop(); int u=t.second,c=C[u],d=D[u],dy=::dy[u]; for (int i=A[u];i<=B[u];i+=dx[u]){ for(int j=c;;){ j=Fat(i,j),j=((j-c)/dy+((j-c)%dy>0))*dy+c; if (j>d) break; if (fat[i][j]!=j) continue; dis[idx[i][j]]=t.first; Modify(idx[i][j],t.first); fat[i][j]=j+1; } } }}int main(){ int T; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(T); while (T--){ read(n); read(m); read(e); read(sx); read(sy); for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) read(idx[i][j]),fat[i][j]=j; fat[i][m+1]=m+1; } Build(1,1,n*m); for (int i=1;i<=e;i++){ read(L[i]),read(R[i]),read(A[i]),read(B[i]),read(dx[i]),read(C[i]),read(D[i]),read(dy[i]),read(w[i]); Add(1,1,n*m,L[i],R[i],i); vst[i]=0; } for (int i=1;i<=n*m;i++) dis[i]=-1; Dij(); for (int i=1;i<=n*m;i++) printf("%d%c",dis[i],i!=n*m?' ':'\n'); } return 0;}
阅读全文
0 0
- [最短路] HDU 5910 Advanced Traffic System
- 【HDU】5910 Advanced Traffic System【线段树+并查集】【数据结构模拟最短路】
- HDU 5910Advanced Traffic System
- lightoj 1281 - New Traffic System (有限制最短路)
- LightOJ - 1281 New Traffic System(二维最短路)
- hdu 1690Bus System,(最短路)
- hdu 1690 Bus System(最短路)
- hdu 1690 Bus System(最短路)
- hdu 1690 Bus System(Dijkstra最短路)
- light oj 1281 - New Traffic System (最短路+dp思想)
- SGU 103. Traffic Lights(最短路)
- SGU 103 Traffic Lights 经典最短路
- SGU 103 Traffic Lights(最短路)
- SGU 103 Traffic Lights 最短路
- [SGU 103] Traffic Lights [最短路]
- 【SGU】103. Traffic Lights 最短路
- SGU 103 Traffic Lights (最短路)
- SGU 103 Traffic Lights(最短路)
- php 开发模式之工厂模式
- oracle nvl
- UFLDL softmax回归编程答案
- 【设计模式】 工厂方法模式
- 我的java之旅--一些基础
- [最短路] HDU 5910 Advanced Traffic System
- k8s-dns-gateway 网关网络扩展实战
- 微信自动检测色情图片_python +itchat
- 立志成为高级码农的第一天,耶耶耶~
- slice() 把匹配元素集合缩减为指定的指数范围的子集
- Python有趣的现象——x+=y VS x=x+y
- Invalid bound statement (not found): 异常
- FFmpeg——Windows下,视频播放器1:音视频处理基础
- json在前端的运用