【CF827F】Dirty Arkady's Kitchen DP
【CF827F】Dirty Arkady's Kitchen
题意:给你一张n个点,m条边的有向图,每条边长度为1,第i条边在[li,ri)的时间内可以进入,求1到n的最短路。
$n,m\le 5\times 10^5$
题解:我们先将所有边按l从小到大排序,然后依次向图中加入每条边。首先对于一条边,我们可以反复走这条边,因此不难想到将每个点按到达时间的奇偶性拆成两个。然后每个点可以到达的时间就可以看成若干个互不相交的区间,我们用mn[i],mx[i]维护当前最后一段区间的左右端点。
在加入一条边时,我们先判断当前能不能走,如果不能走我们就开个vector把每个点当前不能走的边存起来;如果能走,则我们进行BFS,取出每个点vector中的所有边并更新mn,mx值,如果一个点能走了就将其加入队列,枚举到n时更新答案即可。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int maxn=1000010;
int n,m,tot,ans;
int mx[maxn],mn[maxn],fir[maxn];
struct edge
{
int a,b,l,r;
}p[maxn<<1];
queue<int> q;
vector<int> v[maxn];
inline void add(int a,int b,int c,int d)
{
p[++tot].a=a,p[tot].b=b,p[tot].l=c+((c^a)&1),p[tot].r=d-((d^b)&1);
}
bool cmp(const edge &a,const edge &b)
{
return a.l<b.l;
}
inline void solve(int x)
{
int a=p[x].a,b=p[x].b,l=p[x].l=max(p[x].l,mn[a]),r=p[x].r;
if(mx[a]<l)
{
v[a].push_back(x);
return ;
}
q.push(x);
while(!q.empty())
{
x=q.front(),q.pop(),a=p[x].a,b=p[x].b,l=p[x].l,r=p[x].r;
if(l>=r) continue;
if(mx[b]+2<l) mn[b]=l+1,mx[b]=r;
else mx[b]=max(mx[b],r);
if((b>>1)==n) ans=min(ans,mn[b]);
while(fir[b]<(int)v[b].size())
{
int t=v[b][fir[b]];
if(mx[b]>=p[t].l) fir[b]++,q.push(t),p[t].l=mn[b];
else break;
}
}
}
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
if(n==1)
{
puts("0");
return 0;
}
int i,a,b,c,d;
for(i=1;i<=m;i++)
{
a=rd(),b=rd(),c=rd(),d=rd();
add(a<<1,b<<1|1,c,d);
add(a<<1|1,b<<1,c,d);
add(b<<1,a<<1|1,c,d);
add(b<<1|1,a<<1,c,d);
}
sort(p+1,p+tot+1,cmp);
memset(mx,0xc0,sizeof(mx)),memset(mn,0xc0,sizeof(mn));
mn[2]=mx[2]=0,ans=1<<30;
for(i=1;i<=tot;i++) solve(i);
if(ans==(1<<30)) puts("-1");
else printf("%d",ans);
return 0;
}//5 4 1 2 0 10 2 3 0 10 3 4 0 10 4 5 0 10
【CF827F】Dirty Arkady's Kitchen DP的更多相关文章
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- 【CF506E】Mr. Kitayuta's Gift dp转有限状态自动机+矩阵乘法
[CF506E]Mr. Kitayuta's Gift 题意:给你一个字符串s,你需要在s中插入n个字符(小写字母),每个字符可以被插在任意位置.问可以得到多少种本质不同的字符串,使得这个串是回文的. ...
- 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
[BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
- 【BZOJ3003】LED BFS+状压DP
[BZOJ3003]LED Description LED屏是由一个庞大的点阵小灯泡组成的,一开始每个小灯泡都不发光.每一行一共有N个小灯泡,依次标号为1~n.现在给定K个点,要求这K个点发光,其余点 ...
- 【BZOJ2314】士兵的放置 树形DP
[BZOJ2314]士兵的放置 Description 八中有N个房间和N-1双向通道,任意两个房间均可到达.现在出了一件极BT的事,就是八中开始闹鬼了.老大决定加强安保,现在如果在某个房间中放一个士 ...
- 【bzoj2560】串珠子 状压dp+容斥原理
题目描述 有 $n$ 个点,点 $i$ 和点 $j$ 之间可以连 $0\sim c_{i,j}$ 条无向边.求连成一张无向连通图的方案数模 $10^9+7$ .两个方案不同,当且仅当:存在点对 $(i ...
- 【Ural】1519. Formula 1 插头DP
[题目]1519. Formula 1 [题意]给定n*m个方格图,有一些障碍格,求非障碍格的哈密顿回路数量.n,m<=12. [算法]插头DP [题解]<基于连通性状态压缩的动态规划问题 ...
随机推荐
- php把数组、字符串 生成文件
生成的代码 data/ss.php <?php return array ( ', ', ); php代码 $str = "<?php\nreturn \n"; $my ...
- webService(SOAP)性能测试脚本
本文以天气预报的webService为基础进行学习 webService地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx ...
- Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)
知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...
- 19 Go的全能ORM简单入门
gorm 昨天我的ldap账户改了以后,openfalcon(v2.1)-dashboard竟然无法登陆了!显然,没有把我的密码同步到本地数据库里面,怎么办?只能改openfalcon用户认证的源码了 ...
- QT编译错误: multiple definition of `qMain(int, char**)'
QT使用过程中来回添加修改代码,结果出现了编译错误:error: multiple definition of `qMain(int, char**)' 一直看我的源文件是都哪里有错误,最后发现是在p ...
- JSP求和计算
已知两个数的值,如何求和并输出? <%@ page language="java" import="java.util.*,java.text.*" co ...
- Vim终极指南:所思即所得
https://blog.csdn.net/dc_726/article/details/78981756
- 为什么要使用JS模板引擎
我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发 ...
- [AX]AX2012 R2 HR Jobs, Positions, Department和Workers
部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...
- 【视频】ffmpeg mov mp4 m3u8 ts
1.https://ffmpeg.zeranoe.com/builds/ 2.https://blog.csdn.net/psh18513234633/article/details/79312607 ...