BZOJ 3040. 最短路(road)

传送门

就是个最短路....数据过于垃圾,随机边不用连都可以 $Ac$

这里用的是线段树优化 $Dijkstra$ ,这样就不会一个节点反复进入堆里占空间了,速度显然更快

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
    register int x=0,f=1; register char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=1e6+7,M=1e7+7;
const ll INF=1e18;
int n,m;
int fir[N],from[M],to[M],val[M],cntt;
inline void add(int &a,int &b,int c) { from[++cntt]=fir[a]; fir[a]=cntt; to[cntt]=b; val[cntt]=c; }
ll dis[N],A[N];
int T[N<<2];
void build(int o,int l,int r)
{
    T[o]=l; if(l==r) { A[l]=INF; return; }
    register int mid=l+r>>1;
    if(l<=mid) build(o<<1,l,mid);
    if(mid<r) build(o<<1|1,mid+1,r);
}
void change(int o,int l,int r,int k,ll v)
{
    if(l==r) { A[l]=v; return; }
    register int mid=l+r>>1,lc=o<<1,rc=lc|1;
    k<=mid ? change(lc,l,mid,k,v) : change(rc,mid+1,r,k,v);
    T[o]=(A[T[lc]]<A[T[rc]] ? T[lc] : T[rc]);
}
void Dijk()
{
    for(register int i=1;i<=n;i++) dis[i]=INF;
    dis[1]=0; build(1,1,n); change(1,1,n,1,0);
    while(A[T[1]]<INF)
    {
        register int x=T[1]; register ll d=dis[x]; change(1,1,n,x,INF);
        for(register int i=fir[x];i;i=from[i])
        {
            register int &v=to[i]; if(dis[v]<=d+val[i]) continue;
            dis[v]=d+val[i]; change(1,1,n,v,dis[v]);
        }
    }
}
int main()
{
    n=read(),m=read(); register int T,rxa,rxc,rya,ryc,rp; register int x=0,y=0,z=0;
    T=read(),rxa=read(),rxc=read(),rya=read(),ryc=read(),rp=read();
    for(register int i=1;i<=T;i++)
    {
        x=(1ll*x*rxa+rxc)%rp; y=(1ll*y*rya+ryc)%rp;
        register int a=min(x%n+1,y%n+1),b=max(y%n+1,y%n+1);
        add(a,b,100000000-100*a);
    }
    for(register int i=T+1;i<=m;i++)
    {
        x=read(),y=read(),z=read();
        add(x,y,z);
    }
    Dijk(); printf("%lld\n",dis[n]);
    return 0;
}

 

posted @ 2019-09-10 07:38  LLTYYC  阅读(122)  评论(0编辑  收藏  举报