[2016-04-08][POJ][3159][Candies]

  • 时间:2016-04-08 18:05:09 星期五

  • 题目编号:[2016-04-08][POJ][3159][Candies]

  • 题目大意:n个小孩,m条信息,每条信息a ,b ,c,表示b小孩得到的糖不能比a小孩c个,问n小孩比1小孩最多能多多少个,

  • 分析:直接就是求1到n的最短路(如果不是最短路,那么其他边,总有一种情况不能满足最短路这条边的情况,),直接跑一次Dijkstra

  • 遇到的问题:使用’vector’存图TLE了,改成用数组实现的邻接表才A

  1. #include <queue>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <cstdio>
  5. using namespace std;
  6. const int maxn = 3 * 1E4 + 10;
  7. const int maxe = 15 * 1E4 + 10;
  8. int mhead[maxn],nxt[maxe],mend[maxe],mcost[maxe],q;
  9. int vis[maxn],d[maxn];
  10. inline void addedge(int from,int to,int c){
  11. mend[q] = to;
  12. nxt[q] = mhead[from];
  13. mcost[q] = c;
  14. mhead[from] = q++;
  15. }
  16. inline void ini(){
  17. memset(mhead,-1,sizeof(mhead));
  18. q = 2;
  19. }
  20. struct mNode{
  21. int u,c;
  22. mNode(int _u = 0,int _c = 0):u(_u),c(_c){}
  23. bool operator < (const mNode & a)const{
  24. return c > a.c;
  25. }
  26. };
  27. void Dijkstra(int s){
  28. memset(vis,0,sizeof(vis));
  29. memset(d,0x3f,sizeof(d));
  30. priority_queue<mNode> q;
  31. d[s] = 0;
  32. q.push(mNode(s,0));
  33. mNode tmp;
  34. while(!q.empty()){
  35. tmp = q.top();
  36. q.pop();
  37. int u = tmp.u;
  38. if(vis[u]) continue;
  39. vis[u] = 1;
  40. for(int e = mhead[u];~e;e = nxt[e]){
  41. int v = mend[e];
  42. if(!vis[v] && d[v] > d[u] + mcost[e]){
  43. d[v] = d[u] + mcost[e];
  44. q.push(mNode(v,d[v]));
  45. }
  46. }
  47. }
  48. }
  49. int main(){
  50. int n,m,a,b,c;
  51. ini();
  52. scanf("%d%d",&n,&m);
  53. for(int i = 0 ; i < m ; ++i){
  54. scanf("%d%d%d",&a,&b,&c);
  55. addedge(a,b,c);
  56. }
  57. Dijkstra(1);
  58. printf("%d\n",d[n]);
  59. return 0;
  60. }

来自为知笔记(Wiz)

时间: 2024-11-17 18:47:45

[2016-04-08][POJ][3159][Candies]的相关文章

poj 3159 Candies

题目链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 22516   Accepted: 6047 Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought th

POJ 3159 Candies 差分约束

链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 24852   Accepted: 6737 Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the

POJ 3159 Candies(差分约束系统)

题目地址:POJ 3159 第一发差分约束的题..就当作最短路来做了...直接建图+spfa..不过我用的spfa+slf优化都超时..看了讨论区里的..把spfa换成栈就过了... 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include

poj 3159 Candies(dijstra优化非vector写法)

题目链接:http://poj.org/problem?id=3159 题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的糖果数<= c . 最后求n比1最多多多少糖果. 可以从条件中的 B-A<=c及B<=A+c最后要达成这个条件就是要当B>A+c时B=A+c即可 所以差不多就是求最短路.这题中还有一些优化比如 if(vis[u]) continue;这个避免了u点的重复查找 #include <

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

题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c  最后求fly[n]最多能比so[1] 多多少糖? 差分约束问题, 就是求1-n的最短路,  队列实现spfa 会超时了,改为栈实现,就可以 有负环时,用栈比队列快 数组开小了,不报RE,报超时 ,我晕 #include <iostream> #include <cstdlib> #include <cstdio>

poj 3159 candies (差分约束 spfa+stack)

http://poj.org/problem?id=3159 题意:一个班有n个人 每人分到若干糖果 且u的糖果数不能比v少w个 求第1个人与第n个人最大数量差 照着模板spfa+queue果断tle了 之后照着题解说的把queue改成stack就过了 但是还不明白为什么会快 而且如果用数组直接模拟会比stl更快 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

POJ 3159 Candies(SPFA+栈)

题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系,其中y的糖数不能比x的多c个,即y-x <= c  最后求fly[n]最多能比so[1] 多多少糖? 差分约束问题, 就是求1-n的最短路,  队列实现spfa 会超时了,改为栈实现,即可 有负环时,用栈比队列快 数组开小了,不报RE,报超时 ,我晕 #include <iostream> #include <cstdlib> #include <cstdio>

POJ 3159 Candies(差分约束+spfa+链式前向星)

题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A的糖果数<=C . 最后求n 比 1 最多多多少颗糖果. 解题思路:经典差分约束的题目,具体证明看这里<数与图的完美结合——浅析差分约束系统>. 不妨将糖果数当作距离,把相差的最大糖果数看成有向边AB的权值,我们得到 dis[B]-dis[A]<=w(A,B).看到这里,我们可以联想到

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

Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of candies and had flymouse distribute them. All the kids loved candies very much and ofte