zoukankan      html  css  js  c++  java
  • bzoj3040

    题解:

    模板题,地界特斯拉+堆优化

    注意第一种建边

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e6+5,M=1e7+5;
    ll dis[N];
    int a1,b1,c3,a,b,c,a2,b2,a3,b3,T,n,m,num,l;
    int fi[N],zz[M],sl[M],ne[M],f[N],q[N],p;
    void jb(int x,int y,int z)
    {
        ne[++num]=fi[x];
        fi[x]=num;
        zz[num]=y;
        sl[num]=z;
    }
    void up(int x)
    {
        if (x==1)return;
        if (dis[f[x]]<dis[f[x/2]])
         {
             swap(f[x],f[x/2]);
             swap(q[f[x]],q[f[x/2]]);
             up(x/2);
         }
    }
    void down(int x)
    {
        int i=x;
        if (x*2<=l&&dis[f[i]]>dis[f[x*2]])i=x*2;
        if (x*2<l&&dis[f[i]]>dis[f[x*2+1]])i=x*2+1;
        if (i!=x)
         {
             swap(f[x],f[i]);
             swap(q[f[x]],q[f[i]]);
             down(i);
         }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        scanf("%d%d%d%d%d%d",&T,&a1,&a2,&b1,&b2,&p);
        m-=T;
        while (T--)
         {
             a=(ll)((ll)a*a1+a2)%p;
             b=(ll)((ll)b*b1+b2)%p;
             a3=min(a%n+1,b%n+1);
             b3=max(a%n+1,b%n+1);
             c3=1e8-a3;
             jb(a3,b3,c3);
         }
        while (m--)
         {
             scanf("%d%d%d",&a3,&b3,&c3);
             jb(a3,b3,c3);
         } 
        memset(dis,0x3f3f3f3f,sizeof dis); 
        dis[1]=0; 
        for (int i=1;i<=n;i++)f[i]=q[i]=i;
        l=n;
        for (int i=1;i<=n;i++)
         {
             int k=f[1];
             if (k==n)break;
             q[f[l]]=1;
             f[1]=f[l--];
             down(1);
             for (int j=fi[k];j;j=ne[j])
              if (dis[zz[j]]>dis[k]+sl[j])
               {
                   dis[zz[j]]=dis[k]+sl[j];
                   up(q[zz[j]]);
               }
         } 
        printf("%lld",dis[n]); 
    } 
  • 相关阅读:
    利用vector声明二维数组及获取行数和列数
    链表翻转
    关于一段测试代码的知识点补习
    初探二叉搜索树
    排序系列之——再叙堆排序
    Top k 问题
    哈希表及其冲突与排解
    进程互斥与同步
    基础算法之几种排序算法
    进程的描述、状态及控制
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/7718412.html
Copyright © 2011-2022 走看看