题目:http://acm.hdu.edu.cn/showproblem.php?pid=1384

题意:  N 表示有几组测试数据, a , b, c -- >[a, b] 表示一个闭区间, c 表示闭区间内符合条件的点数。 求满组符合N个条件所需最少的点。

这种题主要是找约束方程。

约束方程有两个:(不得不吐个槽, 真nm不好想),设 s[i] 为0 ~ i在集合Z中满足点的个数, 集合Z为最终所求集合;

1、在集合[a, b]中, s[a+1] - s[b] >= c . (注意集合长度、 这里要用最长路解决问题----->注意建边方向)。

2、1 >= s[i+1] - s[i] >= 0; (这条件不太明显,Nm-.-\). 转化一下---> s[i] >= s[i-1] - 1 && s[i + 1] >= 0 + s[i]方向!!!) yuan point = imPoRtant.

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#define min(a, b) a<b? a:b
#define max(a, b) a>b? a:b
using namespace std;
const int INF = 0x3f3f3f3f;
int dis[50010], vis[50010], Min, Max;
struct Edge
{
    int from, to, val, next;
} edge[50005*3];
int head[50005], cnt;
void Add(int a, int b, int c)
{
    Edge E = {a, b, c, head[a]};
    edge[cnt] = E; 
    head[a] = cnt++;
}
void Spfa()
{
    for(int i = Min; i <= Max; i++)
        dis[i] = -INF;
    dis[Min] = 0;            //最长路;
    queue<int> Q;
    Q.push(Min);
    while(!Q.empty())
    {
        int u = Q.front(); Q.pop();
        vis[u] = 0;
        for(int i = head[u]; i != -1; i = edge[i].next)
        {
            int v = edge[i].to;
            if(dis[v] < dis[u] + edge[i].val)
            {
                dis[v] = dis[u] + edge[i].val;
                if(!vis[v])
                {
                    vis[v] = 1;
                    Q.push(v);
                }
            }    
        }    
    } 
    printf("%d\n", dis[Max]);
}
int main()
{
    int N;
    while(~scanf("%d", &N))
    {
        Min = INF; Max = -INF;  cnt = 0;
        memset(vis, 0, sizeof(vis));
        memset(edge, 0, sizeof(edge));
        memset(head, -1, sizeof(head));
        for(int i = 0; i < N; i++)
        {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            Add(u, v+1, w);                  //s[a+1] - s[b] >= c ;
            Min = min(Min, u);               //找大致区间;
            Max = max(Max, v+1); 
        }
        for(int i = Min; i < Max; i++)
        {
            Add(i, i+1, 0);                 //双向边, 权值不同。1 >= s[i+1] - s[i] >= 0---> s[i] >= s[i-1] - 1 && s[i + 1] >= 0 + s[i]
            Add(i+1, i, -1);    
        } 
        Spfa();
    }
    return 0; }

转载于:https://www.cnblogs.com/soTired/p/4779783.html

杭电oj1384--Intervals(差分约束)相关推荐

  1. poj 1201 Intervals 差分约束

    真 .读题杀,英文题一脸懵逼,看来以后还要多读读英文题,不过读完了就能发现这其实是一道很裸的差分约束,按照题意建边即可,但还要注意的就是后一个要大于等于前一个,并且每个位置不能超过一个元素.求一边最大 ...

  2. POJ - 1201 Intervals(差分约束+最短路)

    题目链接:点击查看 题目大意:给定n个闭区间[ai,bi]和n个整数ci,你需要构造一个整数集合Z,使得Z中满足所有的ai<=x<=bi的整数不少于ci个,求出这样的整数集合Z最少包含多少 ...

  3. poj1201/zoj1508/hdu1384 Intervals(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Intervals Time Limit: 10 Seconds      Me ...

  4. poj-1201 Intervals(差分约束)

    题目链接: Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24379   Accepted: 9274 ...

  5. POJ 1716 Integer Intervals 差分约束

    题目:http://poj.org/problem?id=1716 1 #include <stdio.h> 2 #include <string.h> 3 #include ...

  6. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534

    一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一:  感觉难点在于建图  第二:  ①:对于差分不等式,a - b <= ...

  7. HDU 1384 Intervals【差分约束-SPFA】

    类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...

  8. POJ 1716 Integer Intervals【差分约束】

    题意: 知道了数轴上的n个区间,每个区间都是连续的int区间,现在要在数轴上任意取一堆元素,构成一个元素集合V要求每个区间和元素集合V的交集至少有两个不同的元素 求集合V最小的元素个数. 转一分析:( ...

  9. POJ1201 Intervals 【差分约束】

    题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...

最新文章

  1. Verilog RTL 代码设计示例
  2. Mysql基础知识:索引
  3. 管理实践-教练技术的应用
  4. 参加管理课程所获的 之一
  5. python list中append()与extend()用法
  6. java des加密解密_Java实现的DES加密解密工具类实例
  7. 2013再见,2014你好!
  8. php用win还是linux系统,做网站选择linux系统还是选择windows系统好?
  9. Latex初学入门记载
  10. Markdown——让你专注写作
  11. 银行客户用户画像_大数据精准营销用户画像是核心-金融业大数据用户画像实践...
  12. easyphp mysql 密码_EasyPHP 使用经验积累
  13. 商业智慧:创造奇迹的信件
  14. wifi和服务器之间通信协议,安卓和wifi通信协议
  15. python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
  16. NOI2002银河英雄传说——带权并查集
  17. JavaScript 编程题
  18. 资金、时间、盈利“三杀坎”,外卖尾部平台如何求生?
  19. c语言程序设计振动合成,C语言课程设计-振动波的合成原理
  20. 《HEAD FIRST JAVA》第一次回顾和整理

热门文章

  1. oracle游标声明中使用变量赋值,Oracle游标使用方法(游标里使用变量绑定)
  2. python ascii函数二进制_python模块介绍- binascii:二进制和ASCII互转以及其他进制转换...
  3. 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
  4. Java学习总结:20
  5. Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)
  6. 【spring】p命名空间的使用
  7. 实验1 应用SQL Server进行数据定义和管理
  8. c语言——求单词个数
  9. qt4的quick程序升级到qt5_最新8月书单出炉!送给你程序员
  10. iOS - APP任意push新页面那些事