道路与航线(SPFA+双端队列优化)

 题意:给了若干条道路,道路是双向边,航线是单向边,给了一些政策,如果从a到b有一条航线,那么一定不能通过一些道路和一些航线,从b到a。

分析:因为有负边权存在,所以这道题应该用spfa,但是会卡掉传统的queue,可以加一个deque优化,对于每次加边,判断是加到队头还是队尾,如果当前被更新过的边小于还未出队的队头的边就加到队头,否则加到队尾。

还需要注意的是,那些政策的原因原本一些可以走的路,不能再走了。

#include<bits/stdc++.h>using namespace std;const int N = 25000,M = 5e5+10;
int e[M],w[M],ne[M],h[M],idx;
int e1[M],ne1[M],h1[M],idx1;
bool st[M];
int d[M];
int n,r,p,s;
//判断a,b之间的道路是否被政策影响
bool isValid(int a,int b)
{for(int i = h1[a]; i != -1; i = ne1[i]){if(e1[i] == b)return false;}return true;
}
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
//构建无效信息邻接表
void add1(int a,int b)
{e1[idx1] = b, ne1[idx1] = h1[a], h1[a] = idx1 ++;
}void spfa()
{memset(d,0x3f,sizeof d);deque<int> q;// cout<<s<<endl;q.push_back(s);d[s]=0;st[s]=true;while(q.size()){int t=q.front();// cout<<"  "<<t<<endl;q.pop_front();st[t]=false;for(int i=h[t];~i;i=ne[i]){int j=e[i];if(isValid(t,j) &&d[j]>d[t]+w[i]){d[j]=d[t]+w[i];if(!st[j]){if(d[j]<d[q.front()]) q.push_front(j);else q.push_back(j);st[j]=true;}}}}
}
int main()
{memset(h,-1,sizeof h);memset(h1,-1,sizeof h);cin>>n>>r>>p>>s;int a,b,c;while(r--){cin>>a>>b>>c;add(a,b,c);add(b,a,c);}while(p--){cin>>a>>b>>c;add(a,b,c);add1(b,a);}spfa();for(int i=1;i<=n;i++){if(d[i]==0x3f3f3f3f) cout<<"NO PATH"<<endl;else cout<<d[i]<<endl;}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础篇--STM32原理图设计

学会查看数据手册 芯片数据手册获取方式 ST官网&#xff1a;https://www.st.comST中文社区网&#xff1a;https://www.stmcu.org.cn/ 数据手册内容概要 芯片的基本参数&#xff08;STM32F103ZET6为例&#xff09; 主频/FLASH/SRAM &#xff1a; 72MHz/512KB/64KB工作电压/…

9款主流的平面设计工具推荐

设计平面图是设计师的基本技能。目前&#xff0c;市场上流行着大量的平面图工具&#xff0c;令人眼花缭乱。著名的平面图工程师Photoshop&#xff0c;但功能太多&#xff0c;操作界面难以快速启动&#xff0c;不适合初学者的设计。 我们应该如何选择合适的平面图设计工具&…

Todo-List案例版本二

(160条消息) Todo-List案例版本一_bubbleJessica的博客-CSDN博客 引入了localStorage&#xff0c;让案例更加完善 src/App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHe…

Java 设计模式——单例模式

目录 1.结构2.实现2.1.饿汉式2.1.1.静态变量2.1.2.静态代码块2.1.3.枚举方式 2.2.懒汉式2.2.1.synchronized 线程安全2.2.2.双重检查锁2.2.3.静态内部类方式 3.破坏单例模式3.1.序列化反序列化3.2.反射 4.问题解决5.JDK 源码解析——Runtime 类 1.结构 &#xff08;1&#xff…

leetcode 987. 二叉树的垂序遍历(java)

二叉树的垂序遍历 leetcode 987. 二叉树的垂序遍历题目描述DFS 优先队列&#xff08;堆&#xff09;代码演示 二叉树专题 leetcode 987. 二叉树的垂序遍历 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/vertical-orde…

idea支持vue文件-设置对vue的支持

一、idea支持.vue文件 这一步其实就是安装vue.js插件&#xff0c;具体路径为&#xff1a;File ----> Settings ----> Plugins ----> 输入vue&#xff0c;点击搜索结果里的vue.js右边的install按钮&#xff0c;安装成功后重启idea&#xff0c;这样idea就能识别.vue文件…

密码学证明方案寒武纪大爆发——扩容、透明性和隐私的变革潜力

1. 引言 前序博客有&#xff1a; ZKP大爆炸 本文主要参考&#xff1a; StarkWare 2023年6月博客 Cambrian Explosion of Cryptographic Proofs----The transformative potential for scalability, transparency, and privacy2023年3月Eli Ben-Sasson在The 13th BIU Winter …

MySQL---表数据高效率查询(简述)

目录 前言 一、聚合查询 &#x1f496;聚合函数 &#x1f496;GROUP BY子句 &#x1f496;HAVING 二、联合查询 &#x1f496;内连接 &#x1f496;外连接 &#x1f496;自连接 &#x1f496;子查询 &#x1f496;合并查询 &#x1f381;博主介绍&#xff1a;博客名…

ViperGPT解析:结合视觉输入与文本查询生成和执行程序

ViperGPT&#xff1a;结合视觉输入与文本查询生成和执行程序 ViperGPT 是一个混合视觉和语言处理模型&#xff0c;旨在解决视觉查询问题。这种问题需要视觉处理和推理能力的结合&#xff0c;ViperGPT通过利用代码生成模型&#xff0c;将视觉和语言模型组合成子例程&#xff0c…

优秀的 RocketMQ 可视化管理工具 GUI 客户端

优秀的 RocketMQ 可视化管理工具 GUI 客户端 官网地址&#xff1a;http://www.redisant.cn/rocketmq 快速查看所有 RocketMQ 集群&#xff0c;包括Brokers、Topics和Consumers查看消费者订阅了哪些主题&#xff0c;以及消息队列被分配给了哪些消费者&#xff1b;当出现消息积…

Elasticsearch【安装ES服务、安装kibana、Docker安装 、索引操作、文档操作】(二)-全面详解(学习总结---从入门到深化)

目录 Elasticsearch安装_安装ES服务 Elasticsearch安装_安装kibana Elasticsearch安装_Docker安装 Elasticsearch常用操作_索引操作 Elasticsearch常用操作_文档操作 Elasticsearch安装_安装ES服务 准备工作 1、 准备一台搭载有CentOS7系统的虚拟机&#xff0c;使用XSh…

Kafka入门,漏消费和重复消费, 消费者事务,数据积压(二十四)

漏消费和重复消费 重复消费&#xff1a;已经消费了数据&#xff0c;但是offset没提交。 漏消费&#xff1a;先提交offset后消费&#xff0c;有可能会造成数据得漏消费 消费者事务 如果向完成consumer端得进准一次性消费&#xff0c;那么需要Kafka消费端将消费过程和提交offs…