首页 > 其他分享 >[lnsyoj1469/luoguP4644] Cleaning Shifts

[lnsyoj1469/luoguP4644] Cleaning Shifts

时间:2024-11-23 12:44:07浏览次数:10  
标签:luoguP4644 idx start int Shifts Cleaning heap dist include

题意

原题链接
给定 \(n\) 个区间 \([a_i,b_i]\),第 \(i\) 个区间拥有权值 \(S_i\),求使用这些区间将区间 \([M,E]\)(包含所有 \(n\) 个区间)完全覆盖(两端点不需要重合)所需区间的权值最小值。

sol

一道板子题,本来是数据结构优化 DP,但是被最短路薄纱了。
考虑将每一个时间点视作一个节点,这样问题就转化为了从起始点到终止点的路径问题。将每个区间转化为一条 \(a_i \to b_i + 1\),权值为 \(S_i\) 的边,注意由于端点不需要重合,因此需要将 \(n\) 个点拆成 \(n+1\) 个点,因此终点要 \(+1\)。
考虑相交的区间,可以再连接 \(i+1 \to i\),权值为 \(0\) 的边。这样只需要求出 \(M\) 到 \(E + 1\) 的最短路就可以解决问题了
注意会爆 int

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>

#define x first 
#define y second 

using namespace std;
typedef long long LL;
typedef pair<LL, int> PII;

const int N = 100005, M = 200005;
const LL INF = 0x3f3f3f3f3f3f3f3f;

int h[N], e[M], w[M], ne[M], idx;
int n, start, ed;
LL dist[N];
bool st[N];

void add(int a, int b, int c){
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}

void dijkstra(){
    memset(dist, 0x3f, sizeof dist);
    priority_queue<PII, vector<PII>, greater<PII>> heap;
    dist[start] = 0;
    heap.push({0, start});

    while (!heap.empty()){
        PII t = heap.top();
        heap.pop();
        if (st[t.y]) continue;
        st[t.y] = true;

        for (int i = h[t.y]; ~i; i = ne[i]){
            int j = e[i];
            if (dist[j] > dist[t.y] + w[i]) {
                dist[j] = dist[t.y] + w[i];
                heap.push({dist[j], j});
            }
        }
    }
}

int main(){
    memset(h, -1, sizeof h);

    scanf("%d%d%d", &n, &start, &ed);
    for (int i = start; i <= ed; i ++ ) add(i + 1, i, 0);

    while (n -- ){
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        add(a, b + 1, c);
    }

    dijkstra();

    printf("%lld\n", dist[ed + 1] == INF ? -1 : dist[ed + 1]);
}

标签:luoguP4644,idx,start,int,Shifts,Cleaning,heap,dist,include
From: https://www.cnblogs.com/XiaoJuRuoUP/p/-/lnsyoj1469_luoguP4644

相关文章

  • CF819B Mister B and PR Shifts 题解
    题目传送门前置知识权值树状数组及应用解法由[ABC351F]DoubleSum的套路,尝试展开绝对值及\(\min,\max\)。将式子拆开有\(\begin{aligned}&\min\limits_{k=0}^{n-1}\{\sum\limits_{i=1}^{n-k}|a_{i}-(i+k)|+\sum\limits_{i=n-k+1}^{n}|a_{i}-(i-(n-k))|\}\\&=\min......
  • siebel server 启动时报Cleaning up previous execution of【转】
    恢复sibel某个环境整个SIEBELschema数据后,再启动sibelserver时,有时会hang死掉,也不生成任何日志,解决:这种情况往往需要reboot这台siebelserver所在的服务器,再启动siebelserver一般就能正常起来了。起来的提示信息中会多一句提示:cleaninguppreviousexecutionof.....,如下:[s......
  • School cleaning equipment standard package
    Sweepercleaningequipmentisdividedintohand-pushsweepersandride-onsweepers.Thismachinesweepsawaydustwhilesweepingthefloor,one-step,efficientcleaning,savinglaborcostsandimprovingcleaningefficiency.Hand-pushsweepersaredivided......
  • 机器学习策略篇:详解清除标注错误的数据(Cleaning up Incorrectly labeled data)
    清除标注错误的数据监督学习问题的数据由输入\(x\)和输出标签\(y\)构成,如果观察一下的数据,并发现有些输出标签\(y\)是错的。的数据有些标签是错的,是否值得花时间去修正这些标签呢?看看在猫分类问题中,图片是猫,\(y=1\);不是猫,\(y=0\)。所以假设看了一些数据样本,发现这(倒数第二......
  • P1668 [USACO04DEC] Cleaning Shifts S
    原题链接题解1.朴素想法,每头牛要么值班要么不值班,搜索遍历所有情况\(O(2^n)\)2.稍作修改,如果一头牛值班,那么在它值班结束时间之前值班的牛的数量一定是最优的,\(o(nT)\)3.换个思路,已知要覆盖\([1,T]\)这个时间段,所以左端点为\(1\)的牛必须选一个,且选右端点最大的那个,设这......
  • Codeforces 832E Vasya and Shifts
    考虑到这个操作实际上就是\(5\)进制的不进位加法,其实也就是\(5\)进制下的异或。同时因为是\(5\)进制,对于\(x\in[1,4]\),\(x\times0,\cdots,x\times4\)刚好可以表示出\(0\sim4\)。于是可以考虑类似\(2\)进制的线性基弄个\(5\)进制的线性基。即令\(w_i\)为......
  • [ABC219F] Cleaning Robot 题解
    [ABC219F]CleaningRobot题解思路解析要点:将整个图拆分成每一轮的每一个点单独考虑贡献。首先看到\(k\le10^{12}\)发现不能直接枚举\(k\)轮,于是开始找每一轮的规律。首先可以知道,如果操作固定,那么起点和路径上每一个点以及终点的相对位置不会改变。也就是说每一轮的起......
  • 论文阅读-Self-supervised and Interpretable Data Cleaning with Sequence Generativ
    1.GARF简介代码地址:https://github.com/PJinfeng/Garf-master基于SeqGAN提出了一种自监督、数据驱动的数据清洗框架——GARF。GARF的数据清洗分为两个步骤:规则生成(RulegenerationwithSeqGAN):利用SeqGAN学习数据中的关系(datarelationship)。然后利用SeqGAN中......
  • uva 12299 RMQ with Shifts(线段树单点更新初步应用)
                                 uva12299RMQwithShiftsInthetraditionalRMQ(RangeMinimumQuery)problem,wehaveastaticarrayA.Thenforeachquery(L,R)(LR),wereporttheminimumvalueamongA[L],A[L+1],...,A[R].N......
  • UVA12299 RMQ with Shifts
    简要题意你需要维护一个长为\(n\)的序列\(a\),支持以下操作:shift(i1,i2,...,ik)对于\(1\leqp\leqk\),将\(a_{i_p}\)赋值为\(a_{i_{(p\bmodk)+1}}\)。que......