题意:

      有一条直线,直线上做多有50000个点,然后给你组关系 a b c表明a-b之间最少有c个点,问直线上最少多少个点。

思路:

       a-b最少有c个点可以想象a到b+1的距离是大于等于c的,还有一个隐含条件就是

0<=S[i] - S[i-1]<=1,差分约束的题目记住找隐含条件很重要,这样也就是一共三个条件,建边求最上路,记住查分约束求短要用最长路,求最长要用最短路,最长路的建边是

a      ,b       c

S[i-1] ,S[i]    0

S[i]   ,S[i-1]  -1


  1. #include<queue>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #define N_node 50000 + 100
  5. #define N_edge 150000 + 10000
  6. #define INF 1000000000
  7. using namespace std;
  8. typedef struct
  9. {
  10. int to ,cost ,next;
  11. }STAR;
  12. STAR E[N_edge];
  13. int list[N_node] ,tot;
  14. int s_x[N_node] ,mark[N_node] ,mkc[N_node];
  15. void add(int a ,int b ,int c)
  16. {
  17. E[++tot].to = b;
  18. E[tot].cost = c;
  19. E[tot].next = list[a];
  20. list[a] = tot;
  21. }
  22. bool SPFA(int s ,int n)
  23. {
  24. for(int i = 0 ;i <= n ;i ++)
  25. s_x[i] = -INF ,mark[i] = mkc[i] = 0;
  26. queue<int>q;
  27. q.push(s);
  28. mark[s] = mkc[s] = 1;
  29. s_x[s] = 0;
  30. while(!q.empty())
  31. {
  32. int xin ,tou;
  33. tou = q.front();
  34. q.pop();
  35. mark[tou] = 0;
  36. for(int k = list[tou] ;k ;k = E[k].next)
  37. {
  38. xin = E[k].to;
  39. if(s_x[xin] < s_x[tou] + E[k].cost)
  40. {
  41. s_x[xin] = s_x[tou] + E[k].cost;
  42. if(!mark[xin])
  43. {
  44. mark[xin] = 1;
  45. if(++mkc[xin] > n) return 0;
  46. q.push(xin);
  47. }
  48. }
  49. }
  50. }
  51. return 1;
  52. }
  53. int main ()
  54. {
  55. int t ,i ,a ,b ,c ,m ,min ,max;
  56. while(~scanf("%d" ,&m))
  57. {
  58. memset(list ,0 ,sizeof(list));
  59. tot = 1;
  60. min = INF ,max = 0;
  61. for(i = 1 ;i <= m ;i ++)
  62. {
  63. scanf("%d %d %d" ,&a ,&b ,&c);
  64. add(a ,++b ,c);
  65. if(min > a) min = a;
  66. if(max < b) max = b;
  67. }
  68. for(i = min + 1 ;i <= max ;i ++)
  69. {
  70. add(i-1 ,i ,0);
  71. add(i ,i-1 ,-1);
  72. }
  73. SPFA(min ,max);
  74. printf("%d\n" ,s_x[max]);
  75. }
  76. return 0;
  77. }

POJ1201基础差分约束的更多相关文章

  1. POJ1201 Intervals(差分约束)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 10966 Description You ...

  2. poj1201 Intervals——差分约束

    题目:http://poj.org/problem?id=1201 差分约束裸题: 设 s[i] 表示到 i 选了数的个数前缀和: 根据题意,可以建立以下三个限制关系: s[bi] >= s[a ...

  3. POJ1201 Intervals 【差分约束】

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

  4. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  5. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  6. POJ1201:Intervals(差分约束)

    差分约束经典题.设s[i]为前缀和,则有 s[i]-s[i-1]<=1 (i往i-1连-1的边) s[i]>=s[i-1] (i-1往i连0的边) s[b]-s[a-1]>=c (a ...

  7. POJ1201 Intervals (差分约束)

    You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a program that: ...

  8. 鉴于spfa基础上的差分约束算法

    怎么搞?        1. 如果要求最大值      想办法把每个不等式变为标准x-y<=k的形式,然后建立一条从y到x权值为k的边,变得时候注意x-y<k =>x-y<=k ...

  9. POJ1201:Intervals【差分约束】

    题目大意:给出N个闭区间,每个区间给出一个ci值,让你找出最小的数集Z使得每个闭区间都有不少于ci个Z中的元素,求card(Z) 思路:06年集训队论文<浅析差分约束系统>有详细的解题,设 ...

随机推荐

  1. GNS3通过“云”连接到虚拟机实验

    GNS3通过"云"连接到虚拟机实验并使用wireshark工具对数据分析 观看本文之前注意!!!!! 做这次实验,我所遇到的问题,会全部写在文章结尾,如果读者们遇到问题,可查看. ...

  2. C++图论算法——图的储存方式

    使用二维数组邻接矩阵储存图 无向图: 图G 定义图G[101][101],G[i][j]的值表示从结点vi到vj是否有边或弧,若有,取值为1或权值,若无,则取值为0或∞.以下是图G用邻接矩阵表示的列表 ...

  3. 快速查找未打补丁的exp

    在windows DOS窗口下输入以下内容,输出为未打的补丁信息列表 systeminfo>vul.txt&(for %i in (KB977165 KB2160329 KB250366 ...

  4. FreeBSD 宣布 2020 年第 4 季度状态报告

    FreeBSD 宣布 2020 年第 4 季度状态报告● 继续努力从 FreeBSD 基本系统中移除 GPL 协议的软件,以实现 FreeBSD 项目基本目标.● Linux 二进制兼容层的 Linu ...

  5. div+伪元素实现太极图

    需求:使用div和伪元素实现阴阳太极图 图例: 代码: <html> <head> <title>太极图</title> <style type= ...

  6. Java 树结构实际应用 二(哈夫曼树和哈夫曼编码)

     赫夫曼树 1 基本介绍 1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), ...

  7. windows使用vscode设置免密登录linux服务器

    秘钥原理解释 id_rsa.pub是公钥,部署在服务器上 id_rsa是私钥,放在windows本地 本质上它们都是个文本文件 操作流程 生成秘钥对(windows和linux均可) ssh-keyg ...

  8. 攻防世界 reverse serial-150

    serial-150 suctf-2016 直接使用ida发现main函数中夹杂大片数据,应该是自修改代码,动态调试: 调试中发现,输入为16位,验证方法为:从头开始取一字符进行比较,比较通过检验后, ...

  9. 一种3位sar adc仿真验证

    3位sar adc采用下图的电容阵列,电路如下图:所有电容的正端(也称为上极板)与比较器的同相端连接,比较器反相端接gnd,其工作过程进行大致分析见之前的文章<一种3位sar adc工作过程推导 ...

  10. 【linux】驱动-5-驱动框架分层分离&实战

    目录 前言 5. 分离分层 5.1 回顾-设备驱动实现 5.2 分离分层 5.3 设备 5.4 驱动 5.5 系统,模块 5.6 Makefile 参考: 前言 5. 分离分层 本章节记录实现LED驱 ...