• BZOJ3040:最短路——题解


    https://www.lydsy.com/JudgeOnline/problem.php?id=3040

    题意rt,使用pb_ds的堆解决本问题。

    所以其实就是mark一下的。

    不过有人确认过官方不能使用“using namespace __gnu_pbds;”

    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<cctype>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<ext/pb_ds/priority_queue.hpp>
    using namespace std;
    typedef long long ll;
    typedef pair<ll,int>pii;
    typedef __gnu_pbds::priority_queue<pii,greater<pii>,__gnu_pbds::pairing_heap_tag> heap;
    #define fi first
    #define se second
    const int N=1e6+5;
    const int M=1e7+5;
    const ll INF=1e18;
    inline int read(){
        int X=0,w=0;char ch=0;
        while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
        while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
        return w?-X:X;
    }
    struct node{
        int to,nxt;
        ll w;
    }e[M];
    int n,m,c,cnt,head[N];
    heap q;
    heap::point_iterator id[N];
    inline void add(int u,int v,ll w){
        e[++cnt].to=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt;
    }
    ll dis[N];
    void dij(int s){
        for(int i=1;i<=n;i++)dis[i]=INF;
        dis[s]=0;id[s]=q.push(pii(0,s));
        while(!q.empty()){
            int u=q.top().se;q.pop();
            for(int i=head[u];i;i=e[i].nxt){
                int v=e[i].to;ll w=e[i].w;
                if(dis[v]>dis[u]+w){
                    dis[v]=dis[u]+w;
                    if(id[v]!=0)q.modify(id[v],pii(dis[v],v));
                    else id[v]=q.push(pii(dis[v],v));
                }
            }
        }
        return;
    }
    int main(){
        n=read(),m=read();
        int t=read(),rxa=read(),rxc=read(),rya=read(),ryc=read(),rp=read();
        int x=0,y=0;
        for(int i=1;i<=t;i++){
            x=((ll)x*rxa+rxc)%rp;
            y=((ll)y*rya+ryc)%rp;
            int u=min(x%n+1,y%n+1),v=max(y%n+1,y%n+1);
            add(u,v,100000000-100*u);
        }
        for(int i=t+1;i<=m;i++){
            int u=read(),v=read(),w=read();
            add(u,v,w);
        }
        dij(1);
        printf("%lld
    ",dis[n]);
        return 0;
    }

    +++++++++++++++++++++++++++++++++++++++++++

     +本文作者:luyouqi233。               +

     +欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

    +++++++++++++++++++++++++++++++++++++++++++

  • 相关阅读:
    mysql 语法
    mycat 配置简介
    redis sentinel 配置
    Spark SQL 读到的记录数与 hive 读到的不一致
    HDP3.1 中 YRAN 和 MR2 的内存大小配置的计算方式
    在 windows 下搭建 IDEA + Spark 连接 Hive 的环境
    HDP3.1 中配置 YARN 的 timeline server 使用外部的 HBase
    大规模使用 Apache Kafka 的20个最佳实践
    卸载mac版本的GlobalProtect
    js解决约瑟夫问题
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/9102882.html
Copyright © 2020-2023  润新知