题目链接:

  http://poj.org/searchproblem

题目大意:

  飞天鼠是班长,一天班主任买了一大包糖果,要飞天鼠分发给大家,班里面有n个人,但是学生A认为学生B比自己多的糖果数目不应该大于c,如果不满足自己的条件,学生A就会向老师告状,在这个班级里面泰迪熊的编号是1,班长的编号是n,班长想和泰迪熊的糖果相差最大,问:在满足m个学生的要求后,班长与泰迪熊的糖果相差最大是多少?

解题思路:

  差分约束系统,|Xa-Xb| <= c,我们假设Xa小于Xb,把糖果的最大差当成边权,因为要满足全部人的要求,也就是要求所建图的最短路,用spfa+queue优化tle了,然后我就用了dijkstra+优先队列。感觉用邻接表+优先队列对dijkstra优化真是太美妙了,省去了很多的无用枚举,但是dijkstra的先天不足还是没有办法挽救~~~~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <queue>
  5. #include <vector>
  6. #include <iostream>
  7. #include <algorithm>
  8. using namespace std;
  9. #define maxn 30010
  10.  
  11. struct Edge
  12. {
  13. int e, w;
  14. Edge(int e=, int w=) : e(e),w(w) {}
  15. };
  16.  
  17. bool operator < (const Edge &a, const Edge &b)
  18. {
  19. return a.w > b.w;//dist小的优先级高
  20. }
  21.  
  22. vector< vector<Edge> > G;//二维vector
  23. //vector<Edge>G[maxn]要比前者慢,估计申请空间需要的时间也比较可观
  24. bool vis[maxn];
  25. int n;
  26.  
  27. void dijkstra();
  28.  
  29. int main ()
  30. {
  31. int m;
  32. while (scanf ("%d %d", &n, &m) != EOF)
  33. {
  34. G.clear();
  35. G.resize(n+);//动态申请空间
  36. while (m --)
  37. {
  38. int a, b, s;
  39. scanf ("%d %d %d", &a, &b, &s);
  40. G[a].push_back(Edge(b, s));
  41. }
  42. dijkstra ();
  43. }
  44. return ;
  45. }
  46.  
  47. void dijkstra()
  48. {
  49. priority_queue<Edge>Q;
  50. Edge p, q;
  51. memset (vis, false, sizeof(vis));
  52. p.e = , p.w = ;
  53. Q.push (p);
  54.  
  55. while (!Q.empty())
  56. {
  57. p = Q.top();//选取最优点
  58. Q.pop();
  59. if (vis[p.e])//已求出最短路,进行下一个
  60. continue;
  61.  
  62. if (p.e == n)//已求出1到n的最短路
  63. break;
  64. vis[p.e] = true;
  65. int len = G[p.e].size();
  66.  
  67. for (int i=; i<len; i++)
  68. {
  69. q = G[p.e][i];
  70. if ( !vis[q.e] )//对剩余的点进行松弛操作
  71. {
  72. q.w += p.w;
  73. Q.push(q);
  74. }
  75. }
  76. }
  77. printf ("%d\n", p.w);
  78. }

poj 3159 Candies dijkstra + queue的更多相关文章

  1. POJ 3159 Candies (图论,差分约束系统,最短路)

    POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...

  2. poj 3159 Candies (dij + heap)

    3159 -- Candies 明明找的是差分约束,然后就找到这题不知道为什么是求1~n的最短路的题了.然后自己无聊写了一个heap,518ms通过. 代码如下: #include <cstdi ...

  3. POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)

    原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...

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

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

  5. SPFA/Dijkstra POJ 3159 Candies

    题目传送门 题意:n个人发糖果,B 比 A 多 C的糖果,问最后第n个人比第一个人多多少的糖果 分析:最短路,Dijkstra 优先队列优化可过,SPFA竟然要用栈,队列超时! 代码: /****** ...

  6. POJ 3159 Candies 【差分约束+Dijkstra】

    <题目链接> 题目大意: 给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的糖果数<= c .最后求n 比 1 ...

  7. POJ 3159 Candies(差分约束,最短路)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 20067   Accepted: 5293 Descrip ...

  8. POJ 3159 Candies(差分约束)

    http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...

  9. 图论--差分约束--POJ 3159 Candies

    Language:Default Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 43021   Accep ...

随机推荐

  1. Meteor Assets资源

    静态服务器资源位于应用程序内的 private 子文件夹.在这个例子中,我们将学习如何从简单的JSON文件中使用数据. 第1步 - 创建文件和文件夹 让我们创建一个 private 文件夹并在这个文件 ...

  2. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  3. C\C++中strcat()函数、sprintf函数

    http://blog.csdn.net/smf0504/article/details/52055971 http://c.biancheng.net/cpp/html/295.html

  4. Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)

    Spring4.0的新特性我们在上一章已经介绍过了. 包含它对jdk8的支持,Groovy Bean Definition DSL的支持.核心容器功能的改进,Web开发改进.測试框架改进等等.这张我们 ...

  5. easyui英文提示变中文

    近期玩JQuery easyUI,系统默认的日期和文本输入框提示英文.作为一个地道的中国人,是不是提示成中文.日期也显示成中文,是不是更人性化呢,下面为操作方法哦. 更改前效果 1 输入框提示为英文 ...

  6. ubuntu下安装pycharm的方法

    linux下安装pycharm是比较麻烦的. 安装pycharm之前要安装好JDK8,依次执行如下的命令: sudo add-apt-repository ppa:webupd8team/java s ...

  7. Swift基础一(代码)

    import Foundation println("Hello, World!") var string1 = "Hello BeiJing" //定义一个变 ...

  8. 命令行方式下登录SqlPlus,密码含特殊字符

    全撞上了! 真难侍候!oracle 12c,想登录sql plus,结果没有图形界面,直接出来个命令行.这下好了,我这个数据库,多实例,意味着登录要指定实例:密码中含有特殊字符"@" ...

  9. [JS进阶] HTML5 之文件操作(file)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/oscar999/article/details/37499743 前言 在 HTML 文档中 < ...

  10. shell脚本常用(记)

    1.变量检查,判空 a.直接变量判断  if [ ! $1 ];then ..empty..fi b.变量通过" "引号引起来  if [ ! -n "$1" ...