zoukankan      html  css  js  c++  java
  • 【Codeforces 229B】Planets

    【链接】 我是链接,点我呀:)
    【题意】

    【题解】

    设dis[i]表示到达i号传送器的最早时刻. 显然,虽然有那么多的出发时刻的限制,但我们还是越早到越好的. 因为你到得越早,出发的时间肯定不会比到达的时刻晚的差. 所以,就是一个最短路的问题啦. 因为数据范围比较大. 所以得用dijkstra+优先队列的优化. 在出去的时候,只要枚举一遍到达这个点的所有时刻,就能知道它啥时候出发了. 因为∑ki<=10^5,根据dijkstra算法也能知道,每个点作为最小值更新其他点只会用到一次. 所以这个枚举所有时刻的过程的复杂度是线性的,就只会枚举10^5次。 花点时间弄懂这个优先队列优化就ok啦。 剩下的就是模板了.

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    using namespace std;
    
    const int N = 1e5;
    
    int n,m;
    vector<pair<int,int> > g[N+10];
    vector<int> a[N+10];
    int dis[N+10];
    priority_queue<pair<LL,int>,vector<pair<LL,int> >,greater<pair<LL,int> > > pq;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        rep1(i,1,m){
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            g[x].push_back(make_pair(y,z));
            g[y].push_back(make_pair(x,z));
        }
        for (int i = 1;i <= n;i++){
            int cnt;
            scanf("%d",&cnt);
            rep1(j,0,cnt-1){
                int x;
                scanf("%d",&x);
                a[i].push_back(x);
            }
        }
        rep1(i,1,n) dis[i] = -1;
        dis[1] = 0;
        pq.push(make_pair(0,1));
        while (!pq.empty()){
            pair<LL,int> temp = pq.top();pq.pop();
            int x = temp.second;LL disx = temp.first;
            if (dis[x]<disx) continue;
            rep1(i,0,(int)a[x].size()-1)
                if (a[x][i]==disx)
                    disx++;
            for (pair<int,int> temp1:g[x]){
                int y = temp1.first,cost = temp1.second;
                if (dis[y]==-1 || dis[y]>cost+disx){
                    dis[y] = cost+disx;
                    pq.push(make_pair(dis[y],y));
                }
            }
        }
        cout<<dis[n]<<endl;
        return 0;
    }
    
  • 相关阅读:
    云开发数据库 Firebase Firestore 零基础入门视频实战教程(7 个视频)
    在 2021 年你需要掌握的 7 种关于 JavaScript 的数组方法
    2021 年写 JavaScript 代码的 17 个优化技巧
    Redis 学习笔记系列文章之 Redis 的安装与配置 (一)
    selenium webdriver 删除元素
    FFT板子
    pytest一:运行几个简单的测试用例终端显示的信息
    JS 日期取年月日
    将博客搬至CSDN
    c语言编译器
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9741863.html
Copyright © 2011-2022 走看看