题面

这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路;

设s[i]表示1~i中选了多少个;

s[b[i]]-s[a[i]-1]<=1;

s[b[i]]-s[a[i]-1]>=1;

s[i]-s[i-1]<=1;

s[i]-s[i-1]>=0;

然后跑SPFA最短路;

但要注意:普通的SPFA根本就过不去,所以我们应该使用双端队列优化的梦想SPFA;

#include <bits/stdc++.h>
using namespace std;
struct littlestar{
int to;
int nxt;
int w;
}star[2000010];
int head[2000010],cnt;
void add(int u,int v,int w)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
star[cnt].w=w;
head[u]=cnt;
}
int n,m;
deque<int> q;
int dis[1000010],vis[1000010];
bool SPFA()
{
for(register int i=1;i<=n;i++) dis[i]=999999999;
dis[0]=0;
vis[0]=1;
int tot=0;
q.push_back(0);
while(q.size()){
int u=q.front();
q.pop_front();
vis[u]=0;
for(register int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(dis[v]>dis[u]+star[i].w){
dis[v]=dis[u]+star[i].w;
if(!vis[v]){
vis[v]=1;
++tot;
if(tot>2*(n+m)) return 0;
if(q.size()&&dis[v]>dis[q.front()]) q.push_back(v);
else q.push_front(v);
}
}
}
}
if(dis[n]==999999999) return 0;
return 1;
}
int main()
{
cin>>n>>m;
for(register int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
u--;
add(u,v,1);
add(v,u,-1);
}
for(register int i=1;i<=n;i++){
add(i-1,i,1);
add(i,i-1,0);
}
if(SPFA()) cout<<dis[n]<<" ";
else cout<<"-1";
}

[USACO13OPEN]照片Photo 题解的更多相关文章

  1. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  2. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  3. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  4. 洛谷3084 [USACO13OPEN]照片Photo

    原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...

  5. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

  6. Luugu 3084 [USACO13OPEN]照片Photo

    很神仙的dp...假装自己看懂了,以后回来复习复习... 设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量. 一个区间有两个限制条件:至少放一个,至多放一个. 因为一个区间至多要放一 ...

  7. P3084 [USACO13OPEN]照片Photo dp

    题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...

  8. 【luogu P3608 [USACO17JAN]Balanced Photo平衡的照片】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3608 乍一看很容易想到O(N^2)的暴力. 对于每个H[i]从i~i-1找L[i]再从i+1~n找R[i], ...

  9. 【简●解】[USACO] 照片Photo

    [简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...

随机推荐

  1. POJ 3723 征兵问题(最小生成树算法的应用)

    Conscription Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15923   Accepted: 5510 Des ...

  2. 我不熟悉的string类

    我不常用的string函数 多的不说,直接上: assign函数 string& assign(const char *s); //把字符串s赋给当前的字符串 string& assi ...

  3. confluence 附件docx文件 乱码处理

    服务器安装字体库 Fontconfig是一个用于配置和自定义字体访问的库 yum -y install fontconfig 拷贝需要的字体文件 fonts.zip(或自己电脑中的字体文件c:/Win ...

  4. Apicloud_(项目)网上书城02_后端数据获取

    Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 ApiClou ...

  5. 隐藏表单域、URL重写、cookie、session

    隐藏表单域: 隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的.当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上. 代码格式:<input t ...

  6. DVWA--File Inclusion

    0x01了解什么叫file inclusion File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(incl ...

  7. 【每日一包0009】group-array

    [github地址:https://github.com/ABCDdouyae...] group-array 对数组里面的多项按照指定的key进行整合 用法:group-array(arr, key ...

  8. XStream详解

    XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给客户端,所以我们需要把对象转换成XML再响 ...

  9. 191112Django fbv和cbv

    cbv:类.base.view fbc:函数.base.view from django.contrib import admin from django.urls import path from ...

  10. 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)

    目录 支持向量机原理 支持向量机代码(Spark Python) 支持向量机原理 详见博文:http://www.cnblogs.com/itmorn/p/8011587.html 返回目录 支持向量 ...