蓝桥杯每日一题(SPFA)

3305 作物杂交

用另外一个数组存杂交结果,初始结点都为0,遍历所有杂交结果,只要可以减小就加入到队列中。

if条件是距离小于两个max,因为必须要保证其父辈已经产生。

另外注意使用普通队列即可;

和dijkstra中的st数组不同,这里只用来判断是否是在q中。

所以所有的初始结点都要st为1,pop的时候将结点st置为0.

#include<bits/stdc++.h>
using namespace std;
//3305作物杂交
const int N=2010, M=2e5+10;
int e[M],ne[M],h[N],target[M],dis[N],timee[N],idx,st[N];
int n,m,k,t;
queue<int>q;
void add(int x,int y,int c)
{
  e[idx]=y;
  ne[idx]=h[x];
  target[idx]=c;
  h[x]=idx++;
}
void spfa()
{
    while(q.size())
    {
        int t=q.front();
        q.pop();
        st[t]=0;
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int u=target[i];
            if(dis[u]>max(dis[t],dis[e[i]])+max(timee[t],timee[e[i]]))
               {
                   dis[u]=max(dis[t],dis[e[i]])+max(timee[t],timee[e[i]]);
                   if(st[u])continue;
                   else
                   {
                       q.push(u);
                       st[u]=1;
                   }
               }
        }
    }
}
int main()
{
    cin>>n>>m>>k>>t;
    memset(h,-1,sizeof(h));
    memset(dis,0x3f,sizeof(dis));
    for(int i=1;i<=n;i++)//种植时间
    {
        cin>>timee[i];
    }
    for(int i=0;i<m;i++)//初始节点
    {
        int x;
        cin>>x;
        dis[x]=0;
        q.push(x);
        st[x]=1;
    }
    while(k--)
    {
        int x,y,tt;
        cin>>x>>y>>tt;
        add(x,y,tt);
        add(y,x,tt);
    }
    spfa();
    cout<<dis[t]<<endl;

}

851 spfa求最短路

板子还是老出错。

要记得st数组和dis数组的更新;入队时、出队时候、更新时候;

把st的判断和dis的判断搞反了,先看是否可以更新,可更新一定要先更新。

不要看到st在队列中就不更新了。

#include<bits/stdc++.h>
using namespace std;
//851 spfa求最短路
const int N=1e5+10;
int e[N],ne[N],h[N],w[N],idx,dis[N],st[N];
int n,m;
void add(int x,int y,int c)
{
    e[idx]=y;
    ne[idx]=h[x];
    w[idx]=c;
    h[x]=idx++;
}
void spfa()
{
    queue<int>q;
    q.push(1);
    dis[1]=0;
    st[1]=1;
    while(q.size())
    {
        int t=q.front();
        q.pop();
        st[t]=0;
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int u=e[i];//结点是谁
            int dist=w[i];//边长是
            //只要这个边可更新就更新不要管是否有st
            if(dis[u]>dis[t]+dist)//没在队列里
            {
                dis[u]=dis[t]+dist;
                if(!st[u])
                {
                    q.push(u);
                    st[u]=1;
                }
            }
        }
    }

}
int main()
{
    cin>>n>>m;
    memset(h,-1,sizeof(dis));
    memset(dis,0x3f,sizeof(dis));
    while(m--)
    {
        int x,y,c;
        cin>>x>>y>>c;
        add(x,y,c);
    }
    spfa();
    if(dis[n]==1061109567)cout<<"impossible"<<endl;
    else{
    cout<<dis[n]<<endl;
    }
}

852 spfa判断环路

所有结点要先入队;

因为存在一种情况就是不连通。

所以要把所有的节点入队;dis的数值随意。

所以最短路的求法和负环的判断是不可统一的。

#include<bits/stdc++.h>
using namespace std;
// 852. spfa判断负环  
const int N=1e5+10;
int e[N],ne[N],h[N],w[N],idx,dis[N],st[N],cnt[N];
int n,m;
void add(int x,int y,int c)
{
    e[idx]=y;
    ne[idx]=h[x];
    w[idx]=c;
    h[x]=idx++;
}
int spfa()
{
    queue<int>q;
    for(int i=1;i<=n;i++)q.push(i),st[i]=1;
    while(q.size())
    {
        int t=q.front();
        q.pop();
        st[t]=0;
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int u=e[i];//结点是谁
            int dist=w[i];//边长是
            //只要这个边可更新就更新不要管是否有st
            if(dis[u]>dis[t]+dist)//没在队列里
            {
                dis[u]=dis[t]+dist;
                cnt[u]=cnt[t]+1;
                if(cnt[u]>=n)return 1;
                if(!st[u])
                {
                    q.push(u);
                    st[u]=1;
                }
            }
        }
    }
return 0;
}
int main()
{
    cin>>n>>m;
    memset(h,-1,sizeof(dis));
    //memset(dis,0x3f,sizeof(dis));
    while(m--)
    {
        int x,y,c;
        cin>>x>>y>>c;
        add(x,y,c);
    }

    if(spfa())cout<<"Yes"<<endl;
    else{
    cout<<"No"<<endl;
    }
}

341 最优贸易

我们要找到两个城市在一个城市里买,另一个城市里卖掉;

y的思路:以某个点为界,求其左边买入的水晶球的最低价格,求其右边卖出的水晶球的最高价格;然后遍历相减;

之前都是在最短路上求sum属性,现在要求min属性。要求i左边的就从0开始走。i右边的就从n开始走,所以要保存两个相反的h数组。

又要保持路是可达的。

有bug不要盲目找错动动脑筋。

#include<bits/stdc++.h>
using namespace std;
// 341 最优贸易
const int N=1e5+10,M=5e5+10;
int e[M],ne[M],rh[N],h[N],w[N],idx,minn[N],stt[N],st[N],maxx[N];
//minn和maxx都是截止到i这个点(而且路可通)的最大最小值。
int n,m;
//笑死开始忘了怎么调用函数了,int h[]即可
void add(int h[],int x,int y)
{
    e[idx]=y;
    ne[idx]=h[x];
    h[x]=idx++;
}

void spfa(int flag)
{
    //用两个数组,minn和maxx 两个队列
    //spfa分别从正着和逆着两条路找截止到某个点的最大值和最小值。
    
  minn[1]=w[1];
  queue<int>q;
  st[1]=1;
  q.push(1);
  maxx[n]=w[n];
  queue<int>qq;
  stt[n]=1;
  qq.push(n);
  if(flag)
  {
      while(q.size())
      {
          int t=q.front();
          q.pop();
          st[t]=0;
          for(int i=h[t];i!=-1;i=ne[i])
          {
              int u=e[i];
              if(minn[u]>min(minn[t],w[u]))
              {
                  minn[u]=min(minn[t],w[u]);//先更新
                  //这个位置一定要注意只要符合条件就更新,只有没有在数组中的才加入数组
                  if(!st[u])
                  {
                  q.push(u);
                  st[u]=1;
                  }
                  
                  
              }
          }
      }
  }
  else
  {
      while(qq.size())
      {
          int t=qq.front();
          qq.pop();
          stt[t]=0;
          for(int i=rh[t];i!=-1;i=ne[i])
          {
              int u=e[i];
              if(maxx[u]<max(maxx[t],w[u]))
              {
                  maxx[u]=max(maxx[t],w[u]);
                  if(!stt[u])
                  {
                   qq.push(u);//只有没有在队列中的时候才向里面放
                   stt[u]=1;
                  }
              }
          }
      }
  }
}
int main()
{
  memset(minn,0x3f,sizeof(minn));
  memset(maxx,-0x3f,sizeof(maxx));
    cin>>n>>m;
    memset(h,-1,sizeof(h));
    memset(rh,-1,sizeof(rh));

    for(int i=1;i<=n;i++)
    {
        cin>>w[i];
    }
    while(m--)
    {
        int x,y,c;
        cin>>x>>y>>c;
        add(h,x,y);
        add(rh,y,x);
        if(c==2)
        {
        add(h,y,x);
        add(rh,x,y);
        }
    }
    spfa(1);
    spfa(0);
    int res=0;
    //遍历求取以某个点为分界点求最大差值
    for(int i=1;i<=n;i++)
    {
        res=max(maxx[i]-minn[i],res);
       // cout<<maxx[i]<<" "<<minn[i]<<endl;
    }
    cout<<res<<endl;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/495878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

子虔3D培训大师,助力制造业技能培训

对于制造业企业&#xff0c;传统的培训方式常常伴随着沉重的成本负担&#xff0c;包括聘请培训师的费用、租赁培训场地的租金&#xff0c;以及准备培训材料的成本&#xff0c;这些都让企业在财务上面临不小的压力。同时&#xff0c;传统培训模式还受到时间和空间的限制。学员们…

Redis - 5k star! 一款简洁美观的 Redis 客户端工具~

项目简介 Tiny RDM 是一款现代化、轻量级的跨平台 Redis 桌面客户端&#xff0c;可在 Mac、Windows 和 Linux 系统上运行。初次打开 Tiny RDM&#xff0c;你会被它舒适的风格和配色所吸引&#xff0c;界面简约而不简单&#xff0c;功能齐全。 Tiny RDM 有着如下的功能特性 项…

RF-TI1352P2—双频多协议高发射功率无线模块

RF-TI1352P2是一款基于TI CC1352P7为核心的双频&#xff08;Sub-1 GHz 和 2.4 GHz&#xff09;多协议高发射功率&#xff08;20 dBm&#xff09;无线模块&#xff1b;支持IPEX接口和邮票孔两种天线形式&#xff1b;模块除了集成负责应用逻辑的高性能 48 MHz ARM Cortex-M4F 主处…

【C/C++】C++中的四种强制类型转换

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

电商搬家接口 一键复制商品信息Python php jason

随着电商行业的迅猛发展&#xff0c;越来越多的商家开始将目光投向了线上市场。然而&#xff0c;在电商平台上运营店铺并非易事&#xff0c;尤其是在商品信息的管理与营销方面。传统的商品信息录入方式不仅效率低下&#xff0c;而且容易出错&#xff0c;给商家带来了极大的困扰…

TCP协议和UDP协议的区别

TCP 与 UDP 的 区别 有连接与无连接 有链接&#xff1a;像打电话 需要双方建立连接后才能进行通话 比如说&#xff1a;现在我们要打电话给某个朋友。 输入号码&#xff0c;按下手机拨号键。 手机开始发出 嘟嘟嘟 声音&#xff0c;开始等待对方接听&#xff0c;   而且&#…

成都百洲文化传媒有限公司电商服务的新锐力量

在数字化浪潮席卷全球的今天&#xff0c;电商行业以其独特的魅力和巨大的市场潜力&#xff0c;成为了经济增长的新引擎。而在这一变革的浪潮中&#xff0c;成都百洲文化传媒有限公司以其专业的电商服务&#xff0c;成为了行业内的佼佼者。 一、电商服务特色 成都百洲文化传媒有…

vue h5使用postcss-pxtorem

1、安装我们所需要的依赖 npm install lib-flexiblenpm install postcss-pxtorem 2、在main.js中引入lib-flexible import lib-flexible/flexible 3、在项目根目录中创建文件 postcss.config.js module.exports {plugins: {autoprefixer: {},"postcss-pxtorem": …

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(二)

Pod调度策略 一.污点-Taint二.容忍度-Tolerations三.Pod常见状态和重启策略1.Pod常见状态2.Pod的重启策略2.1测试Always重启策略2.2测试Never重启策略2.3测试OnFailure重启策略&#xff08;生产环境中常用&#xff09; 一.污点-Taint 在 Kubernetes 中&#xff0c;污点&#x…

Data-driven ADP schemes for non-zero-sum games of unknown DT nonlinear systems

Data-driven adaptive dynamic programming schemes for non-zero-sum games of unknown discrete-time nonlinear systems&#xff0c;2018&#xff0c; He Jiang, Huaguang Zhang∗, Kun Zhang, Xiaohong Cui 博弈论、最优控制和强化学习解决离散时间 multi-player 非零和博…

【Qt】QDialog对话框

目录 一、概念 二、对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 三、消息对话框QMessageBox 四、颜色对话框QColorDialog 五、文件对话框QFileDialog 六、字体对话框QFontDialog 七、输入对话框QInputDialog 一、概念 对话框是GUI程序中不可或…

Django 评论楼创建

Django 评论楼创建 【零】最终效果预览 【一】介绍 &#xff08;1&#xff09;情况说明 在Django模型层中有这么个字段 parent models.ForeignKey(toself, on_deletemodels.CASCADE, verbose_name"父评论ID", nullTrue, blankTrue)这个字段是一对多的外键字段 其…

Redis入门到实战-第十九弹

Redis实战热身Count-min-sketch篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、…

验证码demo(简单实现)

前言 我们注意到我们登录网站的时候经常会用到网络验证码,今天我们就简单实现一个验证码的前后端交互问题,做一个小demo 准备 我们这里并不需要依靠原生的java来实现,而是只需要引入一个maven依赖,使用现成的封装好的即可,这是我使用的是hutool工具包 网址:Hutool&#x1f36c;…

MySQL 8:GROUP BY 问题解决 —— 怎么关闭ONLY_FULL_GROUP_BY (详细教程)

在使用 GROUP BY 时&#xff0c;我们可能会遇到以下报错&#xff1a; Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column …… 这是因为我们在select语句中所查询的列并不被group by后面接的列所包含。 对于GROUP BY聚合操作&#xf…

油缸位置传感器871D-DW2NP524-N4

概述 油缸位置传感器是一种使用电感原理来检测物体接近的开关装置。它通过感应物体的电磁场来判断物体的位置&#xff0c;并将信号转化为电信号输出。当物体靠近或远离电感式接近开关时&#xff0c;物体的电磁场会改变&#xff0c;从而使接近开关产生不同的信号输出。电感式接…

Go —— defer

defer defer 语句用于延迟函数的调用&#xff0c;常用于关闭文件描述符、释放锁等资源释放场景。但 defer 关键字只能作用于函数或函数调用。 defer func(){ // 函数fmt.Print("Hello&#xff0c;World!") }()defer fmt.Print("Hello&#xff0c;World!&…

如何在CentOS安装可视化Docker容器管理工具Portainer并无公网IP远程管理

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

智慧公厕,为智慧城市建设注入了新的活力

随着智慧城市的快速发展&#xff0c;公共厕所不再是简单的功能设施&#xff0c;而是成为了提升城市形象、改善民生服务的重要一环。智慧公厕作为新形态的公共厕所&#xff0c;通过精准监测公厕内部的人体活动状态、人体存在状态、空气质量情况、环境变化情况、设施设备运行状态…

Occupancy 后处理

文章目录 bev坐标与自车坐标转换如何创建旋转矩阵 (R_veh) 偏航3D Voxel -> 2D Grid 在进行占据空间&#xff08;occupancy&#xff09;后处理时&#xff0c;需要将不同感知模块的输出进行综合融合&#xff0c;以实现更精确的空间占据和环境感知。以下是针对您提到的几个方面…
最新文章