题意是给A和B发糖果,B的糖果数 – A的糖果数 <= c, 也就是B <= A + c,最后求n比1最多多

几个糖果。题目只有这一个约束条件,建图不难。将AB看成有向图的边,然后c看成边的权值,转化成

最短路来求解,大牛们都说了SPFA + queue会超时,所以用了SPFA + stack。因为这道题没有负

权的边,也可以用堆优化的dij来求这个最短路。

SPFA + Stack

/*Accepted    2396K    532MS    C++    1363B    2012-08-06 15:32:00*/
#include<cstdio>
#include<cstring>
#include<cstdlib>const int inf = 0x3f3f3f3f;
const int V = 30005;
const int E = 150005;
int pnt[E], cost[E], nxt[E];
int head[V], e, dist[V];
bool vis[V];int relax( int u, int v, int c)
{if( dist[v] > dist[u] + c) {dist[v] = dist[u] + c;return 1;}return 0;
}void addedge( int u, int v, int c)
{pnt[e] = v; cost[e] = c; nxt[e] = head[u]; head[u] = e ++;
}int SPFA( int src, int n)
{int i;for(i = 1; i <= n; ++ i){vis[i] = false; dist[i] = inf;}dist[src] = 0;int S[E], top = 1;S[0] = src; vis[src] = true;while(top) {int u, v;u = S[ --top]; vis[u] = false;for(i = head[u]; i != -1; i = nxt[i]) {v = pnt[i];if( 1 == relax( u, v, cost[i]) && !vis[v]) {S[ top ++] = v; vis[v] = true;}}}return dist[n];
}int main()
{int n, m;while( scanf( "%d%d", &n, &m) == 2){int a, b, c;e = 0;memset( vis, false, sizeof vis);memset( head, -1, sizeof head);while( m --){scanf( "%d%d%d", &a, &b, &c);addedge( a, b, c);}printf( "%d\n", SPFA( 1, n));}return 0;
}

Dijkstra

/*Accepted    2392K    610MS    C++    1376B    2012-08-06 15:27:31*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;const int MAXN = 30030, MAXM = 150150;
const int inf = 0x3f3f3f3f;
int first[MAXN], next[MAXM], v[MAXM], w[MAXM], dist[MAXN];
int n, m, e;
typedef pair<int, int> pii;void addedge(int a, int b, int c)
{v[e] = b, w[e] = c;next[e] = first[a], first[a] = e ++;
}void ReadGraph()
{int a, b, c;e = 0;memset(first, -1, sizeof first);while(m --){scanf("%d%d%d", &a, &b, &c);addedge(a, b, c);}
}int Dijkstra(int src, int n)
{int i, x;pii u;priority_queue<pii, vector<pii>, greater<pii> > q;for(i = 1; i <= n; i ++) dist[i] = inf;dist[src] = 0;q.push(make_pair(dist[src], src));while(!q.empty()){u = q.top(), q.pop();x = u.second;if(dist[x] != u.first) continue;if(n == x) break;for(i = first[x]; i != -1; i = next[i]){if(dist[v[i]] > dist[x] + w[i]){dist[v[i]] = dist[x] + w[i];q.push(make_pair(dist[v[i]], v[i]));}}}return dist[n];
}int main()
{while(scanf("%d%d", &n, &m) == 2){ReadGraph();printf("%d\n", Dijkstra(1, n));}return 0;
}

转载于:https://www.cnblogs.com/Yu2012/archive/2012/08/06/2440719.html

POJ 3159 Candies相关推荐

  1. POJ 3159 Candies(差分约束+SPAF)

    题意: 给n个小朋友分发糖果,但小朋友们之间有嫉妒心.接下来m行,每行三个数,分别表示小朋友A希望B得到的糖果不能比他多x个.要求你计算在满足所有小朋友的条件的情况下最多需要准备多少颗糖. 题目: D ...

  2. * poj 3159 Candies 最短路 dijkstra堆优化

    题意: n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果 Input: 输入包含单个测试用例.测试用例以两个整数n和m开头,分别 ...

  3. POJ 3159 Candies 差分约束dij

    分析:设每个人的糖果数量是a[i] 最终就是求a[n]-a[1]的最大值 然后给出m个关系 u,v,c 表示a[u]+c>=a[v] 就是a[v]-a[u]<=c 所以对于这种情况,按照u ...

  4. POJ - 3159 Candies最大差异

    题目链接 题意 n个人分糖果,有m个约束条件,a认为b不能比他多c个糖果,求1和n的最大糖果数量差. 思路 约束条件等价为num[a] + c >= num[b].相当于从a到b有一条等于c的有 ...

  5. K - Candies POJ - 3159(利用了自定义比较操作符)

    K - Candies POJ - 3159 题意: 孩子 A 觉得 B 得到的糖果不能比自己多超过 c,求 n 比 1 最多能多几颗糖果 思路:DJ,松弛条件: sweet[A] > swee ...

  6. 【POJ - 3159】Candies (差分约束,卡SPFA)

    题干: 在幼儿园的时候,Flymouse是班上的班长.有时班主任会给班上的孩子们带来一大袋糖果,让他们分发.所有的孩子都非常喜欢糖果,经常比较他们和别人买的糖果的数量.一个孩子A可以有这样的想法,尽管 ...

  7. POJ 3159[差分约束]

    题目链接:[http://poj.org/problem?id=3159] 题意:有N个小朋友,编号为1-N,每个小朋友将分的一些糖果,给出一些关系A.B.C .表示B最多比A多C个,然后问你盆友1和 ...

  8. 最短路 思维转换 POJ 3159需要深刻理解题意的模板题

    Candies Description: 在幼儿园的时候,Flymouse是班上的班长.有时班主任会给班上的孩子们带来一大袋糖果,让他们分发.所有的孩子都非常喜欢糖果,经常比较他们和别人买的糖果的数量 ...

  9. pku 3159 Candies 差分约束

    题意是:fy作为班长,分发糖果给每个孩子,而分发的过程要满足一个约束条件就是 B -  A <= C 表示B所得到的糖果不能比A多c个.问fy(n点代表)所能得到的糖果数量与sp(0点代表)所能 ...

最新文章

  1. 使用Truffle时遇到的问题和解决方法
  2. Jmeter中文乱码问题
  3. 【附全部代码+图片】使用HTML5+CSS3绘制HTML5的logo——Web前端系列学习笔记
  4. 阅读 LdrInitializeThunk
  5. 广二师的计算机专业好不,广东技术师范学院和广东第二师范学院哪一个更好?...
  6. 广义典型相关分析_一文教你掌握广义估计方程
  7. phpcms v9二次开发之模型类的应用(2)
  8. function传值传字符串,然后Ajax url传值的时候传这个装字符串的变量
  9. mac下面Eclipse安装反编译插件
  10. oracle基础语法(二)ORACLE查询
  11. Word删除表格后空白页的方法
  12. 使用robo 3t连接mongodb的方法
  13. 2020年鼠年春节贺词祝福大全
  14. 现代软件工程 第一章 【概论】练习与讨论
  15. 曾“须知少时凌云志,曾许人间第一流”,却10平米不到屋子像极了你小时候的“梦想”
  16. matlab 中peaks函,peaks_matlab中PEAKS
  17. 人脸识别(81关键点)经典开源核心代码
  18. 远程连接的电脑突然白屏了怎么办?
  19. PR/PO一锅粥,关键信息一图兜
  20. woocommerce 分类到菜单_WooCommerce实用代码集合

热门文章

  1. 输入一个数判断是否对称java_判断对称矩阵 - osc_4mawo3g6的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. java hive 查询语句,使用java连接hive,并执行hive语句详解
  3. 自建邮件服务器_EDM邮件营销需要掌握的一系列知识(有福利)
  4. pandas最大的时间间隔_pandas计算最大连续间隔的方法
  5. vscode运行conda出现 “无法加载文件C:\Users\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本” 的错误
  6. eclipse远程连接Hadoop,用户认证失败
  7. JBPM学习笔记(1)
  8. 在Win上做Python开发?当然是用官方的MS Terminal和VS Code了
  9. 桌面计算机密码应由哪项组成,计算机应用能力考试模拟试题
  10. jquery页面跳转带cookie_JS 如何创建、读取和删除cookie