当前位置: 首页 > news >正文

SPFA/Dijkstra POJ 3159 Candies

 

题目传送门

题意:n个人发糖果,B 比 A 多 C的糖果,问最后第n个人比第一个人多多少的糖果

分析:最短路,Dijkstra 优先队列优化可过,SPFA竟然要用栈,队列超时!

 

代码:

/************************************************
* Author        :Running_Time
* Created Time  :2015-9-1 19:18:52
* File Name     :POJ_3159.cpp
 ************************************************/

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;

#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 3e4 + 10;
const int E = 150000 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
struct Edge {
    int v, w, nex;
    Edge (int _v = 0, int _w = 0) : v (_v), w (_w) {}
    bool operator < (const Edge &r) const {
        return w > r.w;
    }
}edge[E];
int d[N];
int head[N];
int vis[N];
int cnt[N];
int n, m, e;

void init(void) {
    memset (head, -1, sizeof (head));
    e = 0;
}

void Dijkstra(int s)    {
    memset (vis, false, sizeof (vis));
    for (int i=1; i<=n; ++i)    d[i] = INF;
    d[s] = 0;
    priority_queue<Edge> Q;  Q.push (Edge (s, 0));
    while (!Q.empty ()) {
        int u = Q.top ().v; Q.pop ();
        if (vis[u]) continue;
        vis[u] = true;
        for (int i=head[u]; ~i; i=edge[i].nex)  {
            int v = edge[i].v, w = edge[i].w;
            if (!vis[v] && d[v] > d[u] + w) {
                d[v] = d[u] + w;    Q.push (Edge (v, d[v]));
            }
        }
    }
}

void SPFA(int s)    {
    memset (vis, false, sizeof (vis));
    memset (d, INF, sizeof (d));
    d[s] = 0; vis[s] = true;
    stack<int> S;   S.push (s);
    while (!S.empty ()) {
        int u = S.top (); S.pop ();
        vis[u] = false;
        for (int i=head[u]; ~i; i=edge[i].nex)  {
            int v = edge[i].v, w = edge[i].w;
            if (d[v] > d[u] + w)    {
                d[v] = d[u] + w;
                if (!vis[v])    {
                    vis[v] = true;  S.push (v);
                }
            }
        }
    }
}

void add_edge(int u, int v, int w)  {
    edge[e].v = v, edge[e].w = w;
    edge[e].nex = head[u];  head[u] = e++;
}

int main(void)    {
    while (scanf ("%d%d", &n, &m) == 2) {
        init ();
        for (int u, v, w, i=1; i<=m; ++i)   {
            scanf ("%d%d%d", &u, &v, &w);
            add_edge (u, v, w);
        }
        //Dijkstra (1);
        SPFA (1);
        printf ("%d\n", d[n]);
    }

    return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4776758.html

相关文章:

  • 异步函数
  • Android框架之Volley
  • OC变量数据类型
  • win7 蛋疼的时间格式转化
  • MacBook: 安装Mac OS X与多分区Windows双系统完美教程
  • ecshop如何判断缓存文件是否能更新
  • 登录信息提示
  • 某银行网银代发工资无法操作问题解决
  • SpringMVC文件上传
  • Magento 1.x 中文订单打印乱码
  • ios 控件代码transform学习笔记
  • DataTable和Xml互相转化
  • 机器学习温和指南
  • 打印xls注意事项
  • JSPpage与pageContext什么关系
  • php的引用
  • Android单元测试 - 几个重要问题
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • create-react-app项目添加less配置
  • ES6--对象的扩展
  • Intervention/image 图片处理扩展包的安装和使用
  • LintCode 31. partitionArray 数组划分
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • python学习笔记 - ThreadLocal
  • Sublime Text 2/3 绑定Eclipse快捷键
  • webpack入门学习手记(二)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 初探 Vue 生命周期和钩子函数
  • 从伪并行的 Python 多线程说起
  • 和 || 运算
  • 排序算法学习笔记
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ​Linux·i2c驱动架构​
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.each()与$(selector).each()
  • (2)STM32单片机上位机
  • (3)STL算法之搜索
  • (第27天)Oracle 数据泵转换分区表
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)c52学习之旅-静态数码管
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)Google Chrome调试JS
  • *Django中的Ajax 纯js的书写样式1
  • .a文件和.so文件
  • .Net 8.0 新的变化
  • .net framework4与其client profile版本的区别
  • .NET基础篇——反射的奥妙
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET学习全景图
  • ?php echo ?,?php echo Hello world!;?