[vijos1844]遭遇战<SPFA>
题目链接:https://vijos.org/p/1404
我在二分查找区找到这道题的,没错这就是一道摆在二分区但是可以用SPFA做的一道题(当然我后来去看了下分区,貌似这题的方法很多)
这一题还是比较有趣的,我用的是SPFA,状况还是层出不穷,我原本以为可以一次过,结果就一个点没过,好吧这才是最绝望的。。。
后来发现只是因为-1的情况判断失误造成的。。。。
这道题其实看上去像个区间类的dp,但其实也可以用图论做。。。
怎么建图呢,我们建图是个有向图,我们把士兵守卫的区段的起始时间和终止时间+1连边。。。。
好吧我们来说一说为啥是和终止时间+1连边。。。看看样例吧
第一个人是守卫1到3,第二个人是守卫4到5,最后一个守卫1到1,这就是这道题比较骚的地方了,没错这个1不是代表时间点,而应该是时间段,
我们可以理解为,第一个人从1点开始持续守卫三个小时,即从1点到4点,第二个人从4点开始守卫2小时,即从4点到6点,最后一个人从1点开始守卫1小时,从1点到2点
所以建图要注意一下。。。
另外可能会注意到,比如覆盖是1-4,2-6这两个人,那又要怎么让这两个人有关联呢。。。。开始可能回想连下4-2之类的。。但是万一连续几个人的时间段都是这样不完全重合呢。。。例如1-5,2-6,3-7,4-8,这种情况下,我们可以再反向连几条权值为0的边。。。连为2——1,3——2,4——3,i——i-1这样就可以走通了
用最后一个例子来解释一下就是:
假设我吗要从1到7,就可以1-5,然后5-4,然后4-3,最后3-7.。。。这条路径上的5-4,4-3权值为0.。。这样建图后就可以简单跑个SPFA就完成了
当然这道题的方法很多,dalao们可以多加尝试,当时还想了一个区间dp的方法,不过最后这个方法因为我的状态定义问题最后还是搁浅了
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<cstdlib>
#define maxe 10005
#define maxn 90005
using namespace std; struct edge{
int u,v,w,nxt;
}e[maxn*]; int n,tot,s,t,head[maxn],vis[maxn],dis[maxn],inq[maxn]; void adde(int u,int v,int w){
tot++;
e[tot].u=u;
e[tot].v=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot;
} queue<int >q; void spfa(int s,int t)
{
memset(dis,-,sizeof(dis));
dis[s]=;q.push(s);inq[s]=;
while(!q.empty())
{
int u=q.front();
q.pop();inq[u]=;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].v,w=e[i].w;
//printf("\n%d %d %d\n",e[i].u,e[i].v,e[i].w);
if((dis[v]>dis[u]+w&&dis[v]!=-)||(dis[v]==-)){
dis[v]=dis[u]+w;
if(inq[v]==){
q.push(v);inq[v]=;
}
}
}
}
if(dis[t]!=-)printf("%d",dis[t]);
else printf("-1");
} int main()
{
memset(head,-,sizeof(head));
scanf("%d%d%d",&n,&s,&t);t++;
for(int i=;i<=n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);v++;
adde(max(u,s),min(v,t),w);
}
for(int i=s;i<t;i++){
adde(i+,i,);
}
spfa(s,t); }
[vijos1844]遭遇战<SPFA>的更多相关文章
- 【Vijos1404】遭遇战(最短路)
[Vijos1404]遭遇战(最短路) 题面 Vijos 题解 显然可以树状数组之类的东西维护一下\(dp\).这里考虑一种最短路的做法. 首先对于一个区间\([l,r]\),显然可以连边\((l,r ...
- 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
3627: [JLOI2014]路径规划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 186 Solved: 70[Submit][Status] ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- sgu 240 Runaway (spfa)
题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...
- spfa模板
通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...
- SPFA
SPFA算法用来求单源最短路.可以处理任何有解的情况. 先建一个数组\(dist_x = 起点到x的最短路长度\),当\(x=起点\)时为0,当x和起点不通时为INF(本题中为\(2^31-1\)). ...
- BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- bzoj 1179[Apio2009]Atm (tarjan+spfa)
题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...
随机推荐
- SpringCloud - 全家桶
先导篇:SpringCloud介绍篇 第一篇:注册中心Eureka 第二篇:服务提供与Rest+Ribbon调用 第三篇:服务提供与Feign调用 第四篇:熔断器Hystrix(断路器) 第五篇:熔断 ...
- 002-DOM事件实例-实现一个可以拖拽的登陆窗口
前言:这是跟着慕课网一个老师的视频做的,这几天在重新的梳理自己,写完这个例子要系统的学一下jQuery,我司现在用的还是比较多,毕竟用了它不用考虑IE兼容性,可以让开发更有效率. 1.项目需求及基本的 ...
- [面试专题]Web缓存详解
Web缓存详解 标签(空格分隔): 缓存 缓存之于性能优化 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. 降低服务器压力: ...
- 前端每日实战:4# 视频演示如何用纯 CSS 创作一个金属光泽 3D 按钮特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此视频是可以 ...
- DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架
前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...
- SPI总线传输的4种模式
概述 在芯片的资料上,有两个非常特殊的寄存器配置位,分别是 CPOL (Clock POlarity)和 CPHA (Clock PHAse). CPOL配置SPI总线的极性 CPHA配置SPI总线的 ...
- weex 和 appcan 的个人理解
appcan是浏览器技术,前端代码运行在webview上,而weex是原生引擎渲染,说白了就是把H5翻译成原生. weex的官网上说,在开发weex页面就像开发普通网页一样,在渲染weex页面时和原生 ...
- 这样阅读STM32参考手册更高效
<STM32F103xxx参考手册>不需要全部阅读——没有时间的.建议选读,但是前几章必读.存储器和总线架构.电源控制.备份寄存器.复位和时钟控制,通用和复用功能I/O,中断和时间等等前几 ...
- java.lang.reflect.UndeclaredThrowableException: null Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for
java.lang.reflect.UndeclaredThrowableException: null at org.springframework.util.ReflectionUtils. ...
- model进阶
本节目录 一 QuerySet 二 中介模型 三 查询优化 四 extra 五 整体插入 一 QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMI ...