【题解】Vijos1404 遭遇战(最短路图论套路)
【题解】Vijos1404 遭遇战(最短路图论套路)
感觉一定要有建模的思想,不管什么东西要抽象建模之后再用算法解决...
求最短代价就可能可以用最短路,这句话不是强行解释,而是因为图论建模过后,可能存在很多不合法的情况,但是由于我们只是求最短路,所以我们只要保证对于每一条最短路可以构造一个与之对应的合法原问题解
给你一条数轴和 m 条线段,第 i 条线段覆盖区间 [Li,Ri] ,选择它需要代价 Ci 。
请选出代价和最小的一组线段使得区间 [L,R] 中的每一段都被覆盖。
考虑建立这些有向边:\((L_i,R_i+1,C_i),(x,x-1,0)\)
考虑对于一个最短路,构造方案就是这条最短路经过的所有\(i\)选上即可。
充分性和必要性都挺显然的,因为(不绕环的)路径和原问题的解可以一一对应,而一定存在一条最短路使得整条最短路没有环。
加1的原因是我们只要整点覆盖
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; typedef long long ll; char __buf[1<<18],*__c=__buf,*__ed=__buf;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(!isdigit(c))f|=c==45,c=getchar();
while(isdigit(c)) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=9e4+5;
const int inf=0x3f3f3f3f;
int d[maxn];
struct E{int to,w;};
vector<E> e[maxn];
typedef pair<int,int> P;
priority_queue<P,vector<P>,greater<P> > q;
inline void add(const int&fr,const int&to,const int&w){e[fr].push_back({to,w});}
int n,L,R;
inline void dij(){
memset(d,0x3f,sizeof d);
q.push({d[L]=0,L});
while(q.size()){
auto g=q.top();
q.pop();
if(g.first>d[g.second]) continue;
for(auto t:e[g.second])
if(d[t.to]>g.first+t.w)
q.push({d[t.to]=g.first+t.w,t.to});
}
}
int main(){
n=qr(); L=qr(); R=qr();
for(int t=1,t1,t2,v;t<=n;++t){
t1=max(L,qr()),t2=min(qr()+1,R+1);
add(t1,t2,v=qr());
add(t2,t1,v);
}
for(int t=L+1;t<=R+1;++t) add(t,t-1,0);
dij();
if(d[R+1]!=d[0]) printf("%d\n",d[R+1]);
else puts("-1");
return 0;
}
【题解】Vijos1404 遭遇战(最短路图论套路)的更多相关文章
- Vijos1404 遭遇战 最短路,dijkstra,堆
P1404遭遇战 标签:[显示标签] 背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分 ...
- Vijos1404遭遇战[最短路建模]
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC ...
- NOIP2017 逛公园 题解报告 【最短路 + 拓扑序 + dp】
题目描述 策策同学特别喜欢逛公园.公园可以看成一张NNN个点MMM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NNN号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花 ...
- HDU1181 题解(Floyd最短路)
题面: 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路
B - Legacy CodeForces - 787D 这个题目开始看过去还是很简单的,就是一个最短路,但是这个最短路的建图没有那么简单,因为直接的普通建图边太多了,肯定会超时的,所以要用线段树来优 ...
- vijos1404 遭遇战
描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC的人誓死不屈,即将于恐怖分子展开激战,准备让一个人守着A区,这样恐怖分子就不能炸掉服务器了.(一 ...
- P1266 速度限制 (最短路,图论)
题目链接 Solution 在最短路转移的时候在队列或者堆中记录状态为 \(f[u][v]\) 代表上一个节点为 \(u\) ,速度为 \(v\) . 然后按部就班转移即可... Code #incl ...
- 题解 P1144 【最短路计数】
这道题用一次SPFA就可以过了.在求最短路的同时,对答案进行统计即可. 实现: \(dis_i\)表示从1到\(i\)的最短路(实在还是不懂的话看程序吧). 当\(dis_i>dis_j+1\) ...
- 【题解】Bzoj2125最短路
处理仙人掌 ---> 首先建立出圆方树.则如果询问的两点 \(lca\) 为圆点,直接计算即可, 若 \(lca\) 为方点,则需要额外判断是走环的哪一侧(此时与两个点在环上的相对位置有关.) ...
随机推荐
- laravel 随笔
laravel5.5 1.laravel 查询数据库默认返回对象,如何改成 返回值为数组 答:在 App\Providers\EventServiceProvider 文件中 第一步: use Il ...
- Libev源码分析10:libev中poll的用例
在Libev中,使用poll作为backend时,涉及到下面几种数据结构: int *pollidxs; int pollidxmax; struct pollfd *polls; int pollm ...
- Java排序算法总结
1.冒泡排序 冒泡排序是排序算法中最基本的一种排序方法,该方法逐次比较两个相邻数据的大小并交换位置来完成对数据排序,每次比较的结果都找出了这次比较中数据的最大项,因为是逐次比较,所以效率是O(N^2) ...
- 使用git和sourcetree提交代码的一些问题
今天遇到的几个坑算是解决了1.开始不能用指令提交,可以执行git add命令前添加gitdir=$(git rev-parse --git-dir); scp -p -P 29418 wangtao1 ...
- 梯度优化算法Adam
最近读一个代码发现用了一个梯度更新方法, 刚开始还以为是什么奇奇怪怪的梯度下降法, 最后分析一下是用一阶梯度及其二次幂做的梯度更新.网上搜了一下, 果然就是称为Adam的梯度更新算法, 全称是:自适应 ...
- 2019-5-27-C#-很少人知道的科技
title author date CreateTime categories C# 很少人知道的科技 lindexi 2019-05-27 19:33:36 +0800 2018-03-16 08: ...
- 装机必备 Windows 操作系统ISO镜像资源
小编今天使用VMware虚拟机软件搭建Win7系统时,开始一直不成功总是出现:Start booting from CD...Directory "EZBOOT" not foun ...
- h5的canvas绘制方格(边框随即色)
文章地址 https://www.cnblogs.com/sandraryan/ 两个循环绘制 <body> <canvas id="cv" width=&quo ...
- C#的循环语句(一)
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变) {循环体} for 格式: for(int i=1/*初始条件*/;0<=10 ...
- java数组简介
数组(Array)是Java 语言中内置的一种基本数据存储结构,通俗的理解,就是一组数的集合,目的是用来一次存储多个数据.数组是程序中实现很多算法的基础,可以在一定程度上简化代码的书写. 备注: 数组 ...