题目链接:http://poj.org/problem?id=3159

题意:有n个小孩,m个关系格式是A B C 表示小孩 B 的糖果数最多比小孩A多C个,相当于B-A<=C;

有m个这样的关系最后求小孩n比小孩1最多多几个糖果;

差分约束:

比如给出三个不等式,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值, 我们可以把a,b,c转换成三个点,k1,k2,k3是边上的权,如图

 

由题我们可以得知,这个有向图中,由题b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比较k1+k2和k3的大小,求出最小的就是c-a的最大值了

根据以上的解法,我们可能会猜到求解过程实际就是求从a到c的最短路径,没错的....简单的说就是从a到c沿着某条路径后把所有权值和k求出就是c -a<=k的一个

推广的不等式约束,既然这样,满足题目的肯定是最小的k,也就是从a到c最短距离...

然而本题就是直接求1到n的最短距离即可;

直接用队列会TLE,所以要用优先队列,或者用栈也能过;

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <queue>
  6. #include <stack>
  7. #include <algorithm>
  8. #include <map>
  9. #include <string>
  10. typedef long long LL;
  11. #define INF 0x3f3f3f3f
  12. #define met(a, b) memset(a, b, sizeof(a))
  13. #define N 150100
  14.  
  15. using namespace std;
  16.  
  17. struct node
  18. {
  19. int v, w, Next;
  20. friend bool operator < (node p, node q)
  21. {
  22. return p.w > q.w;
  23. }
  24. }e[N];
  25.  
  26. int Head[N], cnt, n, dist[N], vis[N];
  27.  
  28. void Add(int u, int v, int w)
  29. {
  30. e[cnt].v = v;
  31. e[cnt].w = w;
  32. e[cnt].Next = Head[u];
  33. Head[u] = cnt++;
  34. }
  35.  
  36. int spfa(int s)
  37. {
  38. for(int i=; i<=n; i++)
  39. {
  40. dist[i] = INF;
  41. vis[i] = ;
  42. }
  43.  
  44. priority_queue<node> Q;
  45. vis[s] = ;
  46. dist[s] = ;
  47.  
  48. node p, q;
  49. p.v = s;p.w = ;
  50.  
  51. Q.push(p);
  52. while(!Q.empty())
  53. {
  54. p = Q.top(); Q.pop();
  55. vis[p.v] = ;
  56. for(int i=Head[p.v]; i!=-; i=e[i].Next)
  57. {
  58. q.v = e[i].v;
  59. if(dist[q.v] > dist[p.v]+e[i].w)
  60. {
  61. dist[q.v] = dist[p.v]+e[i].w;
  62. if(!vis[q.v])
  63. {
  64. vis[q.v] = ;
  65. q.w = dist[q.v];
  66. Q.push(q);
  67. }
  68. }
  69. }
  70. }
  71. return dist[n];
  72. }
  73.  
  74. int main()
  75. {
  76. int m, u, v, w;
  77. while(scanf("%d %d", &n, &m) != EOF)
  78. {
  79. met(e, );
  80. met(Head, -);
  81. cnt = ;
  82. for(int i=; i<=m; i++)
  83. {
  84. scanf("%d %d %d", &u, &v, &w);
  85. Add(u, v, w);
  86. }
  87. int ans = spfa();
  88. printf("%d\n", ans);
  89. }
  90. return ;
  91. }

Candies---hdu3159(spfa+差分约束)的更多相关文章

  1. (简单) POJ 3159 Candies,Dijkstra+差分约束。

    Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the he ...

  2. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...

  3. codevs 1183 泥泞的道路 (二分+SPFA+差分约束)

    /* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...

  4. Schedule Problem spfa 差分约束

    题意:有n个任务,给出完成n个任务所需时间,以及一些任务安排.任务安排有四种: FAS a b:任务a需在任务b开始后完成. FAF a b:任务a需在任务b完成后完成. SAF a b:任务a需在任 ...

  5. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...

  6. Candies POJ - 3159 差分约束

    // #include<iostream> #include<cstring> #include<queue> #include<stack> #inc ...

  7. hdoj--3666--THE MATRIX PROBLEM(差分约束+SPFA深搜)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. POJ-3159.Candies.(差分约束 + Spfa)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 40407   Accepted: 11367 Descri ...

  9. POJ 3159 Candies(SPFA+栈)差分约束

    题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c  最后求fly[n]最多能比so[1] ...

随机推荐

  1. Java 的class文件关系

    一个java源文件javac出多个class文件出来!是怎么回事? 1. 你在一个文件里定义了几个类的时候,会出现这种情况,比如public class A {}class B {}class C { ...

  2. php 上传图片

    学习地址:http://www.imooc.com/video/2473 <?php header("content-type:text/html;charset=utf-8" ...

  3. unserialize函数中的参数是否是污染数据

    1.原理 在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件.这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出.php中就 ...

  4. Maven问题总结:could not resolve archetype xxxxxxx from any of the configured repositories

    错误提示 Eclipse中通过Archetype创建Maven项目时报错:Could not resolve archetype xxxxxxx from any of the configured ...

  5. ThinkPHP的cookide保存二维数组的方法

    ThinkPHP中的cookie是不支持二维数组的. 如果要保存二维数组.只能特殊处理 $data[263] = array('gid'=>263,'num'=>1); $data[266 ...

  6. eclipse不正常编译导致错误:Access denied for user 'root'@'localhost' (using password: YES)

    使用eclipse连接mysql报错:Access denied for user 'root'@'localhost' (using password: YES) 连接代码没有任何问题,网上找了很多 ...

  7. 用php随机生成福彩双色球号码的2种方法

    不瞒您说,俺也是个双色球爱好者,经常买,但迟迟没有中过一等奖,哈哈.这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考.新的一年,祝大家中大奖,发大财. 方法一 复制代码代码如下 ...

  8. 给Android程序员的六个建议

    给Android程序员的六个建议 分类: 安卓相关2015-07-14 23:58 177人阅读 评论(0) 收藏 举报 android程序员 如果你一年前写的代码 , 在现在看来你还感觉写的很不错 ...

  9. ecshop 完美解决动态ip登录超时和购物车清空问题

    ecshop 完美解决动态ip登录超时和购物车清空问题 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-05-06 前一段时间,ECSHOP开发中心的一个客户 ...

  10. Jquery--array

    --遍历数组 $.each(Array, function(i, value) { this; //this指向当前元素 i; //i表示Array当前下标 value; //value表示Array ...