POJ 3159 Candies(SPFA+栈)差分约束[通俗易懂]

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>
#include <cstring>
#include <queue>
#include <stack>
#include <algorithm>
const int N = 210;
const int maxn = 30100;
const int maxm = 200000;
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define init(a) memset(a,0,sizeof(a))
#define MIN INT_MIN
#define MAX INT_MAX
#define LL long long
using namespace std;
int max(int a,int b){if(a>b)return a; else return b;}
int min(int a,int b){if(a<b)return a; else return b;}
const int INF=0x3f3f3f3f;
struct node
{
    int v,w;
    int next;
}edge[maxm];
int head[maxn];
bool vis[maxn];
int dis[maxn];
int cnt;
void add(int a,int b,int w)//加边
{
    edge[cnt].v=b;
    edge[cnt].w=w;
    edge[cnt].next=head[a];
    head[a]=cnt++;
}
void SPFA(int s,int n)
{
    //stack<int>stk;
    int stk[100000];
    int top = 0;
  
    //stk.push(s);
    stk[top++] = s;
    FOR(i,1,n+1)
    {dis[i] = INF;
    vis[i] = 0;
    }
    dis[s] = 0;
    vis[s] = 1;
    while(top!=0)
    {
        int u=stk[--top];
        //stk.pop();
        vis[u]=false;
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            int v=edge[i].v;
            if(dis[v]>dis[u]+edge[i].w)
            {
                dis[v]=dis[u]+edge[i].w;
                if(!vis[v])
                {
                    vis[v]=true;
                    stk[top++] = v;
                }
            }
        }

    }
}
void initt()
{
    cnt=0;
    memset(head,-1,sizeof(head));
}
int main()
{
    int n,m;
    int a,b,c;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        initt();
        while(m--)
        {
            scanf("%d%d%d",&a,&b,&c);
            add(a,b,c);
        }
        SPFA(1,n);
        printf("%d\n",dis[n]);
    }
    return 0;
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115400.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PostgresSQL 分页查询 SQL语句

    PostgresSQL 分页查询 SQL语句SELECT*FROM“库名”.“表名”wheretellike‘%1%’orderbyidasclimit3OFFSET0;

    2022年10月19日
  • 信号处理之父_信息与信号处理

    信号处理之父_信息与信号处理一、DFT之前言部分由于matlab已提供了内部函数来计算DFT、IDFT,我们只需要会调用fft、ifft函数就行;二、函数说明:fft(x):计算N点的DFT。N是序列x的长度,即N=len

  • Java安全之ysoserial-JRMP模块分析(一)

    Java安全之ysoserial-JRMP模块分析(一)首发安全客:Java安全之ysoserial-JRMP模块分析(一)0x00前言在分析到Weblogic后面的一些绕过方式的时候,分析到

    2021年12月12日
  • spark scheduler_scheduledthreadpool

    spark scheduler_scheduledthreadpoolSpark的TaskScheduler和DagScheduler开始研究神奇的spark。会陆续将研究的心得放上来。在Spark中一个核心的是模块就是调度器(Scheduler),在spark中Scheduler有两种TaskScheduler(是低级的调度器接口),DagScheduler(是高级的调度)我们在创建SparkContext对象的时候,sparkcontext内部就会创建Ta…

    2022年10月10日
  • 如何设置线程池参数大小?

    如何设置线程池参数大小?关注Java后端技术栈“回复“面试”获取最新资料我们在使用线程池的时候,会有两个疑问点:线程池的线程数量设置过多会导致线程竞争激烈如果线程数量设置过少的话,还会导致系统无法充分利用计算机…

  • SSM框架介绍「建议收藏」

    SSM框架介绍「建议收藏」1、SSM框架简介SSM框架是SpringMVC,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,Controller层,Service层,DAO层四层,使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号