题目链接
题意
n个人分糖果,有m个约束条件,a认为b不能比他多c个糖果,求1和n的最大糖果数量差。
思路
约束条件等价为num[a] + c >= num[b]。相当于从a到b有一条等于c的有向边,这样就转换为了最短路问题,直接用dijkstra求1到n的最短路即可。

参考大佬博客
由p[j] - p[i] <= k可得p[j] <= p[i] + k
在单源最短路径的算法中有一步是“若mindis[j] > mindis[i] + dis[i][j],则mindis[j] = mindis[i] + dis[i][j],这样就满足mindis[j] <= mindis[i] + dis[i][j]”。因此本题可以使用单源最短路径的算法来解决,对于“第i个同学要求第j个同学的糖不能超过自己k个,即p[j] - p[i] <= k,k >= 0”这个条件,建立一条边(i->j)=k,然后用最短路算法求解。

#include <iostream>
#include <cstdio>
#include <queue>
#include <string.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
#define pr pair<int, int>const int MAXN = 1e5;
int head[MAXN], to[MAXN<<1], nex[MAXN<<1], n, m;
int edge[MAXN<<1], cnt;
int d[MAXN];
bool final[MAXN];
int t, s, e;
void init()
{memset(head, -1, sizeof(head));cnt = 0;
}void add(int x, int y, int val)
{to[++cnt] = y;edge[cnt] = val;nex[cnt] = head[x];head[x] = cnt;
}
int dijkstra()
{memset(final, 0, sizeof(final));memset(d, INF, sizeof(d));priority_queue<pr, vector<pr>, greater<pr> > q;q.push(make_pair(0, s));//firstÊÇlength,secondÊǶ¥µãd[s] = 0;while (!q.empty()){int u = q.top().second;q.pop();final[u] = true;for (int i = head[u]; ~i; i = nex[i]){int v = to[i];int len = edge[i];if(!final[v] && d[v] > d[u] + len){d[v] = d[u] + len;q.push(make_pair(d[v], v));}}}return d[e];
}
int main()
{init();scanf("%d %d", &n, &m);s = 1, e = n;int x, y;int val;for (int i = 1; i <= m; i++){scanf("%d %d %d", &x, &y, &val);add(x, y, val);}printf("%d\n", dijkstra());
}

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

    题意是给A和B发糖果,B的糖果数 – A的糖果数 <= c, 也就是B <= A + c,最后求n比1最多多 几个糖果.题目只有这一个约束条件,建图不难.将AB看成有向图的边,然后c看成边 ...

  4. 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 ...

  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. 量子物理学家:如果宇宙中所有物体突然消失,会剩下一个「空宇宙」吗?
  2. Unicode/not set/multi-byte/部分常用函数
  3. Spring Boot构建RESTful API与单元测试
  4. 四层LVS与七层Nginx负载均衡的区别
  5. airpods_如何通过AirPods与其他人共享音乐
  6. 9 CO配置-控制-成本中心会计-在成本控制范围激活成本中心会计核算
  7. Netty 的 ByteBuf 是如何支持 堆内存非池化 实现的
  8. freemarker中运算符_freemarker常见语法大全
  9. 深度学习--Inception-ResNet-v1网络结构
  10. JavaScript中会打印出undefined的情况汇总
  11. 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
  12. [JT]攻防世界web专项qwq
  13. deepin回收站无法清空
  14. Vue生成二维码组件封装
  15. 招投标过程---投标之述标 大杂烩
  16. java 对汉字(中文)的汉语拼音(发音)进行排序工具类(代码实现)
  17. Intent的基本属性及用法
  18. python列表是什么数据结构_Python之数据结构:列表
  19. 网络安全——TCP/IP协议簇中的安全协议
  20. SQL学习-2.7 SQL聚合

热门文章

  1. 看完了这个简短的故事,你会有什么感触?
  2. fgo服务器维护补偿,fgo国服4月12日版本版本更新公告 维护18个小时 补偿18个圣晶石...
  3. 关于GPU利用率低值得考虑的几个点
  4. hive 启动服务命令及连接
  5. STM32驱动MPU6050
  6. vue插槽的使用方法
  7. java实现文件夹的复制和剪切(包括子文件和子文件夹)
  8. Oracle数据库之查询排序
  9. 再谈数据中台 | 图文直播文字回放
  10. prefetch 和preload_资源预加载preload和资源预读取prefetch简明学习