• 【BZOJ2118】墨墨的等式(同余最短路)


    题意:

     

     思路:From https://www.cnblogs.com/GavinZheng/p/11709153.html#4421510

    写的1e9,int范围的

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 typedef unsigned int uint;
      5 typedef unsigned long long ull;
      6 typedef long double ld;
      7 typedef pair<int,int> PII;
      8 typedef pair<ll,ll> Pll;
      9 typedef vector<int> VI;
     10 typedef vector<PII> VII;
     11 typedef pair<ll,ll>P;
     12 #define N  500010
     13 #define M  6000010
     14 #define INF 1e9
     15 #define fi first
     16 #define se second
     17 #define MP make_pair
     18 #define pb push_back
     19 #define pi acos(-1)
     20 #define mem(a,b) memset(a,b,sizeof(a))
     21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
     22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
     23 #define lowbit(x) x&(-x)
     24 #define Rand (rand()*(1<<16)+rand())
     25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
     26 #define ls p<<1
     27 #define rs p<<1|1
     28 #define fors(i) for(auto i:e[x]) if(i!=p)
     29 
     30 const int MOD=1e8+7,inv2=(MOD+1)/2;
     31       int p=1e4+7;
     32       double eps=1e-8;
     33       int dx[4]={-1,1,0,0};
     34       int dy[4]={0,0,-1,1};
     35 
     36 ll dis[N];
     37 int head[N],vet[M],nxt[M],len[M],a[N],vis[N],mn,n,tot;
     38 
     39 int read()
     40 {
     41    int v=0,f=1;
     42    char c=getchar();
     43    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     44    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     45    return v*f;
     46 }
     47 
     48 ll readll()
     49 {
     50    ll v=0,f=1;
     51    char c=getchar();
     52    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     53    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     54    return v*f;
     55 }
     56 
     57 void add(int a,int b,int c)
     58 {
     59     nxt[++tot]=head[a];
     60     vet[tot]=b;
     61     len[tot]=c;
     62     head[a]=tot;
     63 }
     64 
     65 void build()
     66 {
     67     rep(i,0,mn-1) head[i]=0;
     68     tot=0;
     69     rep(i,0,mn-1)
     70      rep(j,1,n) add(i,(i+a[j])%mn,a[j]);
     71 }
     72 
     73 void dijk()
     74 {
     75     priority_queue<pair<ll,int> >q;
     76     mem(vis,0);
     77     mem(dis,0x3f);
     78     q.push(MP(0,0)); dis[0]=0;
     79     while(!q.empty())
     80     {
     81         int u=q.top().se;
     82         q.pop();
     83         if(vis[u]) continue;
     84         vis[u]=1;
     85         int e=head[u];
     86         while(e)
     87         {
     88             int v=vet[e];
     89             if(dis[u]+len[e]<dis[v])
     90             {
     91                 dis[v]=dis[u]+len[e];
     92                 q.push(MP(-dis[v],v));
     93             }
     94             e=nxt[e];
     95         }
     96     }
     97 }
     98 
     99 int main()
    100 {
    101     n=read();
    102     ll L=readll(),R=readll();
    103     L--;
    104     mn=INF;
    105     int flag=0;
    106     rep(i,1,n)
    107     {
    108         a[i]=read();
    109         if(a[i])
    110         {
    111             mn=min(mn,a[i]);
    112             flag=1;
    113         }
    114     }
    115     if(mn==INF)
    116     {
    117         printf("0
    ");
    118         return 0;
    119     }
    120     build();
    121     dijk();
    122     if(flag) dis[0]=0;
    123      else dis[0]=mn;
    124     ll ans=0;
    125     rep(i,0,mn-1)
    126     {
    127         if(R>=dis[i]) ans+=((R-dis[i])/mn)+1;
    128         if(L>=dis[i]) ans-=((L-dis[i])/mn)+1;
    129     }
    130     printf("%lld
    ",ans);
    131     return 0;
    132 }
  • 相关阅读:
    Oracle Instance
    第03章-VTK系统概述(1)
    二叉查找树BST----java实现
    [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
    linux之SQL语句简明教程---LIKE
    spring mvc 入门示例
    MyBatis与Spring集成
    MyBatis 一对一关联查询
    MyBatis CRUD Java POJO操作
    eclipse xml自动提示
  • 原文地址:https://www.cnblogs.com/myx12345/p/11877249.html
Copyright © 2020-2023  润新知