【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 [题解]<基于连通性状态压缩的动态规划问题 ...
随机推荐
- CorelDRAW中关于锁定与解锁对象的操作
在编辑复制的图形时,有时为了避免对象受到操作的影响,可以使用“锁定与解锁对象”功能键对已经编辑好的对象进行锁定.被锁定的对象将不能进行任何编辑操作,本教程将详解CorelDRAW中关于锁定与解锁对象的 ...
- 使用monkey技术修改python requests模块
例如请求前和请求后各来一条日志,这样就不需要在自己的每个代码都去加日志了. 其实也可以直接记录'urllib3.connectionpool' logger name的日志. 修改了requests ...
- ASP.NET 动态创建文本框 TextBox (add TextBox to page dynamically)
下面的函数每执行一次就生成一个TextBox(其实是<input type="Text">) var i=0; function changeIt() ...
- iOS去掉icon的(自带磨光效果)gloss effects
只需两步,第一步:在项目的plist文件,最上层add row ,内容 icon already includes gloss effects YES. 第二步在 icon files 字段里添加 ...
- ios开发之--MJRefresh上拉加载的时候,tableview会向上偏移
1,出现这种情况的原因: 这个应该是UITableView最大的改变.我们知道在iOS8引入Self-Sizing之后,我们可以通过实现estimatedRowHeight相关的属性来展示动态的内容, ...
- mysql的wait_timeout配置(此处处理方法是有问题的,不建议作为操作参考)
mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时). 在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据 ...
- mysql 字符串转数据丢失精度,mysql转换丢失精度,mysql CAST 丢失精度
mysql 字符串转数据丢失精度,mysql转换丢失精度,mysql CAST 丢失精度 =============================== ©Copyright 蕃薯耀 2017年9月1 ...
- IIS 7安装ModSecurity实现WAF功能
ModSecurity 是一款开源Web应用防火墙,支持Apache/Nginx/IIS,可作为服务器基础安全设施,还是不错的选择. 系统环境:window 2008 R2+IIS 7 0X01 Mo ...
- asp.net 验证码
Before proceeding with the topic first we must understand "What is a Captcha code?" and &q ...
- NSIS安装vcredist_64.exe
; ExecWait ‘vcredist_x86.exe’ # 一般的安装ExecWait ‘”vcredist_x86.exe” /q’ # silent install 静默安装; ExecWai ...