题意:给定1维连续T<= 1000000个点,以及n<=10000个线段,求最少的线段覆盖该区间。。

思路:很显然,贪心是可以做的。。不过这一题最有意思的是使可以转换为最短路模型。。

如果一条线段覆盖了[l, r],可以连l->r+1,距离为1的边。。

此外对于每个点i,连一条i->i-1,距离为0的边。。

那么实际上就是求1->n+1的最短路。。

感觉最短路模型还是很有意思的,跟2006北京赛区的最小割有点小像。。、

code:

 #include  <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int maxn = ;
struct edge{
int v, w, next;
} e[maxn << ];
int dis[maxn], last[maxn], n, m, tot;
int use[maxn]; inline void add(const int& u, const int& v, const int& w){
e[tot] = (edge){v, w, last[u]}; last[u] = tot++;
} void spfa(){
priority_queue<pii, vector<pii>, greater<pii> > q;
for (int i = ; i <= n + ; ++i) dis[i] = 0x3fffffff;
pii tmp;
memset(use, , sizeof(int) * (n + ));
q.push( make_pair(, ) ), dis[] = ;
int u, v;
while (!q.empty()){
u = q.top().second; q.pop();
if (use[u]) continue;
use[u] = ;
if (u == n+) return;
for (int p = last[u]; p != -; p = e[p].next){
v = e[p].v;
if (dis[u] + e[p].w < dis[v]){
dis[v] = dis[u] + e[p].w;
tmp.first = dis[v], tmp.second = v;
q.push(tmp);
}
}
}
} void solve(){
tot = ;
memset(last, -, sizeof(int) * (n + ));
int u, v;
for (int i = ; i < m; ++i){
scanf("%d%d", &u, &v);
add(u, v + , );
}
for (int i = ; i <= n; ++i)
add(i, i-, );
spfa();
// for (int i = 1; i <= n; ++i)
// printf("", dis[1]);
int ans = dis[n+];
if (ans == 0x3fffffff) puts("-1");
else cout << ans << endl;
} int main(){
// freopen("a.in", "r", stdin);
while (scanf("%d%d", &m, &n) != EOF){
solve();
}
}

bzoj 3389的更多相关文章

  1. BZOJ 3389: [Usaco2004 Dec]Cleaning Shifts安排值班

    题目 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MB Description      ...

  2. Bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 最短路,神题

    3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 218  Solved: ...

  3. bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 -- 贪心

    3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MB Description     一天有 ...

  4. 【BZOJ】3389: [Usaco2004 Dec]Cleaning Shifts安排值班(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3389 显然左端点排序后,依次取. 要考虑下一次取的方案: 待选点为a[j].x<=a[now] ...

  5. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  6. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  7. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  8. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  9. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

随机推荐

  1. jquery datatable 参数

    DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...

  2. <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明

    X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 content="IE=7"在无论页面是否包含<!DOCTYPE> ...

  3. [清理页面缓存]asp.net、html

    (1)   MVC BaseController: Controller内 protected override void Initialize(System.Web.Routing.RequestC ...

  4. 开发中model,entity和pojo的区别

    Entity接近原始数据,Model接近业务对象- Entity:是专用于EF的对数据库表的操作, Model:是为页面提供数据和数据校验的,所以两者可以并存 POJO:POJO是Plain Ordi ...

  5. MySQL计算销售员昨日各指标综合得分_20161206

    数据需求如上,新增重激活以15天未下单为界定 SELECT d.销售员,(日销售额得分*0.6+日新增客户数得分*0.15+日客单价得分*0.1+日客户平均产品数得分*0.15)AS 综合得分,日销售 ...

  6. {CSDN}{英雄会}{反相互}

    思路: 给定一个字符串,求两个不重叠的字串,他们翻转互补.其中一个字符串可以是删掉最多两个字符的原字符串子串. 动态规划,由于可以对子串进行删除操作,我首先想到了LCS问题,但需要枚举所有的长度,这样 ...

  7. QT报错Error processing

    执行命令:qmake modbus_ups_mlrl.pro modbus_ups_mlrl.pro文件内容: TEMPLATE = vclib CONFIG +=qt debug thread QT ...

  8. VC++模态对话框和非模态对话框

    MFC中有两种类型的对话框:模态对话框和非模态对话框.  模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他任务.非模态对话框是指当其显示时,允许转而执行程序中 ...

  9. python之路-Day1

    Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言 动态语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量 ...

  10. python sort和sorted的区别以及使用方法

    iteralbe指的是能够一次返回它的一个成员的对象.iterable主要包括3类: 第一类是所有的序列类型,比如list(列表).str(字符串).tuple(元组). 第二类是一些非序列类型,比如 ...