Candies POJ - 3159

题意:

给N个小朋友分糖, 给出M组约束a, b, c表示b的糖果不能比a多c个以上, 求1号和N号的最大糖果差异数

题解:

非常显然的线性查分约束问题

对于a, b, c表示b的糖果不能比a多c个以上 , 即cnt[a]+c >= cnt[b], 可以理解为a指向b的一条权值为c的单向边.

这样一来整个系统也就转换成了图, 而对于求1和N的最大差异数, 即cnt[N]-cnt[1] 的最大值, 即1到N的最短路

求最短路时可用堆优化Dijkstra和栈优化SPFA两种

经验小结:

搞清楚差分约束的是最短路还是最长路

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
using namespace std;
#define ms(a,b) memset(a,b,sizeof(a));
typedef long long ll;
const int inf = 1 << 30;
const ll maxn = 300010; int n, m, edgeCnt = 0, head[maxn];
struct node {
int to, w, next;
node(int tt, int ww, int nn) { to = tt, w = ww, next = nn; }
node() {}
}es[maxn]; int d[maxn];
bool book[maxn]; inline int read() {
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch>'9') { if (ch == '-')w = -1; ch = getchar(); }
while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * w;
} void add(int u, int v, int w) {
es[edgeCnt] = { v,w,head[u] };
head[u] = edgeCnt++;
} void spfa(int s) {
stack<int>st;
fill(d, d + maxn, inf);
d[1] = 0, book[1] = true;
st.push(1);
while (!st.empty()) {
int u = st.top();
st.pop();
book[u] = false;
for (int i = head[u]; i != -1; i = es[i].next) {
int v = es[i].to, w = es[i].w;
if (d[u] + w < d[v]) {
d[v] = d[u] + w;
if (!book[v]) {
st.push(v);
book[v] = true;
}
} }
}
} int main() {
ms(head, -1);
//ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
n = read(), m = read();
while (m--) {
int a, b, c;
a = read(),b= read(), c =read();
add(a, b, c);
}
spfa(1);
cout << d[n] << endl;
return 0;
}

POJ 3159 :Candies 【线性差分约束 链式前向星 栈优化SPFA】的更多相关文章

  1. POJ 3169 Layout(差分约束+链式前向星+SPFA)

    描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

  2. [poj3159]Candies(差分约束+链式前向星dijkstra模板)

    题意:n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果 解题关键:差分约束系统转化为最短路,B-A>=C,建有向边即可,与 ...

  3. HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】

    最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...

  4. 【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)

    Dijkstra+ 链式前向星+ 优先队列   Dijkstra算法 Dijkstra最短路算法,个人理解其本质就是一种广度优先搜索.先将所有点的最短距离Dis[ ]都刷新成∞(涂成黑色),然后从起点 ...

  5. 模板 Dijkstra+链式前向星+堆优化(非原创)

    我们首先来看一下什么是前向星.   前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和 ...

  6. POJ 3159 Candies(差分约束+最短路)题解

    题意:给a b c要求,b拿的比a拿的多但是不超过c,问你所有人最多差多少 思路:在最短路专题应该能看出来是差分约束,条件是b - a <= c,也就是满足b <= a + c,和spfa ...

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

    题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A ...

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

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

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

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

  10. POJ 3159 Candies(差分约束)

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

随机推荐

  1. Python有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

    n = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if(i != k) and (i != j) and ...

  2. 【luogu题解】T378828 位运算

    位运算 题目背景 题目由 daiyulong20120222 创作(me) 并由 QBW1117完善以及数据 . 题目描述 给定两个数\(x,y\) ,在给定一个位运算符号 \(c\). 请你列出 \ ...

  3. 从物理机到K8S:应用系统部署方式的演进及其影响

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 概述 随着科技的进步,软件系统的部署架构也在不断演进,从以前传统的物理机到虚拟机.Docker和Kubernetes,我们 ...

  4. [AGC003D] Anticube

    Problem Statement Snuke got positive integers $s_1,...,s_N$ from his mother, as a birthday present. ...

  5. Freezable ---探索WPF中Freezable承载数据的原理

    引言 在之前写的一篇文章[WPF --- 如何以Binding方式隐藏DataGrid列]中,我先探索了 DataGridTextColumn 为什么不在可视化树结构内?又给出了解决方案,使用 Fre ...

  6. 建议收藏备查!MySQL 常见错误代码说明

    先给大家看几个实例的错误分析与解决方案. 1.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data ...

  7. vue3 + vite + ts 配置 @ 别名

    第一步 npm install @types/node -D 第二步 这是原 vite.config.ts文件 import { defineConfig } from 'vite' import v ...

  8. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 03.EQS初体验:从智障到智慧

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文章对应课程第十一章 43节.这篇文章会简单介绍EQS和实际上手使用,为AI添加更丰富的行为逻辑. 目录 初识 ...

  9. osgEarth使用笔记3——加载倾斜摄影数据

    目录 1. 概述 2. 详论 2.1. 位置 2.2. 着色 2.3. 其他 3. 结果 4. 参考 1. 概述 我在<OSG加载倾斜摄影数据>这篇博文中论述了如何通过OSG生成一个整体的 ...

  10. Spring Cloud 学习推荐

    学习 Spring Boot Spring tutorials | Java Web Development, Spring Cloud Programming tutorials Spring Bo ...