AtCoder Beginner Contest 375 F - Road Blocked

AtCoder Beginner Contest 375 F - Road Blocked

在这里插入图片描述

题目大意

给你一个n个点m条边的无向图,接下来有两种操作
1.删除编号为 i i i 的边
2.询问 x , y x,y x,y 两点之间的最短路

思路

注意到 n < = 300 n<=300 n<=300 ,而且我我们需要任意两点最短路,因此可以考虑使用 F l o y e d Floyed Floyed 算法计算全源最短路
但是删除边这个操作属实是有点难受了,那我们怎么办呢?
我们可以考虑反向操作输入数据,不就变成了加边操作了嘛,这个就好处理了
对于每次加入的边,我们可以这样处理(可以理解为用这两个点将附近的点全部更新一次)
d i s [ j ] [ k ] = m i n ( d i s [ j ] [ k ] , d i s [ j ] [ u ] + v a l + d i s [ v ] [ k ] ) ; dis[j][k]=min(dis[j][k],dis[j][u]+val+dis[v][k]); dis[j][k]=min(dis[j][k],dis[j][u]+val+dis[v][k]);
d i s [ j ] [ k ] = m i n ( d i s [ j ] [ k ] , d i s [ j ] [ v ] + v a l + d i s [ u ] [ k ] ) ; dis[j][k]=min(dis[j][k],dis[j][v]+val+dis[u][k]); dis[j][k]=min(dis[j][k],dis[j][v]+val+dis[u][k]);
其中 u , v u,v u,v 是加入的边的两个端点
后续的操作就没什么难度了
时间复杂度 O ( n 3 + n 2 q ) O(n^3+n^2q) O(n3+n2q)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#define rep(i,x,y) for(ll i=x;i<=y;++i)
#define per(i,x,y) for(ll i=x;i>=y;--i)
using namespace std;
typedef long long ll;
const ll V=2e5+100;
ll n,m,q;
ll a[V],g[500][500],b[V],c[V];
ll opt[V],x[V],y[V],cnt,ans[V];
ll dis[500][500];
bool pd[V];
inline ll in()
{ll res=0,f=1;char ch;while((ch=getchar())<'0'||ch>'9')if(ch=='-') f=-1;res=res*10+ch-'0';while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-'0';return res*f;
}
inline void put(ll x)
{if(x<0) putchar('-'),x*=-1;if(x>9) put(x/10);putchar(x%10+48);
}
int main()
{n=in(),m=in(),q=in();rep(i,1,n)rep(j,1,n)dis[i][j]=1e18;rep(i,1,n) dis[i][i]=0;rep(i,1,m) a[i]=in(),b[i]=in(),c[i]=in();rep(i,1,q){opt[i]=in(),x[i]=in();if(opt[i]==2) y[i]=in();else pd[x[i]]=true ;}rep(i,1,m)if(!pd[i])dis[a[i]][b[i]]=dis[b[i]][a[i]]=c[i];rep(k,1,n)rep(i,1,n)rep(j,1,n)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);per(i,q,1){if(opt[i]==1){ll u=a[x[i]],v=b[x[i]],val=c[x[i]];
//			dis[u][v]=dis[v][u]=val;rep(j,1,n)rep(k,1,n){dis[j][k]=min(dis[j][k],dis[j][u]+val+dis[v][k]);dis[j][k]=min(dis[j][k],dis[j][v]+val+dis[u][k]);}}else{if(dis[x[i]][y[i]]==1e18) ans[++cnt]=-1;else ans[++cnt]=dis[x[i]][y[i]];}}per(i,cnt,1) printf("%lld\n",ans[i]);return 0;
}

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

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

相关文章

界面控件Telerik UI for WPF 2024 Q3亮点 - 支持禁用数据过滤等

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

HarmonyOS NEXT 应用开发实战(七、知乎日报轮播图的完整实现)

在今天的博文中&#xff0c;我们将深入探讨如何在 HarmonyOS NEXT 中使用 ArkUI 实现一个轮播图组件。我们将通过一个示例代码来演示这个完整的过程&#xff0c;其中包含获取数据、管理数据源以及渲染组件等多个部分。 先来看下最终实现效果&#xff1a; 项目准备 首先&#…

Deep Learning

深度学习 文章目录 前言面向开发人员的 NVIDIA AI 平台每个 AI 框架 - 加速统一平台从开发到部署前言 深度学习是 AI 和机器学习的一个子集,它使用多层人工神经网络在对象检测、语音识别、语言翻译等任务中提供最先进的准确性。 深度学习与传统机器学习技术的不同之处在于,深…

MySQL8.0主从同步报ERROR 13121错误解决方法

由于平台虚拟机宿主机迁移&#xff0c;导致一套MySQL主从库从节点故障&#xff0c;从节点服务终止&#xff0c;在服务启动后&#xff0c;恢复从节点同步服务&#xff0c;发现了如下报错&#xff1a; mysql> show slave status\G; *************************** 1. row *****…

Linux 外设驱动 应用 2 KEY 按键实验

2 按键 2.1 按键介绍 按键是指轻触式按键开关&#xff0c;也称之为轻触开关。按键开关是一种电子开关&#xff0c;属于电子元器件类&#xff0c;最早出现在日本&#xff0c;称之为&#xff1a;敏感型开关&#xff0c;使用时以满足操作力的条件向开关操作方向施压开关功能闭合…

spring05

一: 场景设定和问题复现 1 准备项目 pom.xml //单元测试:每个业务单独运行 <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.3.1</version> <scope>…

民宿预订新纪元:SpringBoot实现的在线平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理民宿在线预定平台的相关信息成为必然。开发…

springboot041师生健康信息管理系统(论文+源码)_kaic

摘 要 随着移动应用技术的发展&#xff0c;越来越多的用户借助于移动手机、电脑完成生活中的事务&#xff0c;许多的传统行业也更加重视与互联网的结合。 本论文主要介绍基于java的师生健康信息管理系统&#xff0c;运用软件工程原理和开发方法&#xff0c;采用springboot框架…

Flink时间语义和时间窗口

前言 在实际的流计算业务场景中&#xff0c;我们会发现&#xff0c;数据和数据的计算往往都和时间具有相关性。 举几个例子&#xff1a; 直播间右上角通常会显示观看直播的人数&#xff0c;并且这个数字每隔一段时间就会更新一次&#xff0c;比如10秒。电商平台的商品列表&a…

VSCode自搭建嵌入式环境的make构建工具选择

make构建工具即make.exe。 make.exe作为环境变量&#xff0c;和Makefile脚本同步协作&#xff0c;Makefile里面的语法规定了代码项目中多文件的编译顺序和编译规则。 ①MinGW-64&#xff1a;如果选择MinGW/bin文件目录下的mingw32-make.exe&#xff0c;将其重命名为make.exe&a…

2.cpp输入输出

cpp输入输出 1.cpp输入输出 1.cpp输入输出 项目中需要用到中文提示&#xff0c;需要去设置中更改字符编码为GBK&#xff0c;不然程序会乱码 注意&#xff1a;先设置编码格式&#xff0c;再创建工程 C 中的输入和输出&#xff08;I/O&#xff09;主要是通过标准库中的输入输出…

scala 抽象类

理解抽象类 抽象的定义 定义一个抽象类 &#xff1a;abstract class A {} idea实例 抽象类重写 idea实例 练习 1.abstract2.错3.abstract class A{}4.对

GROUP BY分组

1. 插入测试数据 INSERT INTO course (course_name,teacher_id) VALUES (毛概,1)&#xff0c; (线性代数,2)&#xff0c; (政治&#xff0c;3)&#xff0c; (程序设计语言,1)&#xff0c; (离散数学,2)&#xff0c; (编译技术,3)&#xff0c; (嵌入式基础,1)&#xff0c; (单片…

element plus中menu菜单技巧

我在使用element plus的menu&#xff08;侧边栏&#xff09;组件的过程中遇到了一些问题&#xff0c;就是menu编写样式和路由跳转&#xff0c;下面给大家分享以下&#xff0c;我是怎么解决的。 1.页面效果 我要实现的网站布局是这样的&#xff1a; 侧边栏折叠以后的效果&#…

C++数据结构-红黑树全面解读(进阶篇)

1.红黑树的概念 红黑树是一种二叉搜索树&#xff0c;但在每个结点上增加了一个存储位用于表示结点的颜色&#xff0c;这个颜色可以是红色的&#xff0c;也可以是黑色的&#xff0c;因此我们称之为红黑树。 红黑树通过对任何一条从根到叶子的路径上各个结点着色方式的限制&…

el-table表格里面有一条横线

表格里面 有一条横线&#xff0c; 出现原因&#xff1a;是自定义了表格头.使用了固定列&#xff08;fixed&#xff09;&#xff0c;定宽。就很难受。。。 添加样式文件&#xff1a; <style lang"scss" scoped>::v-deep {.el-table__fixed-right {height: 100%…

【STL】string类的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 string类的介绍--为什么学习string类 一、string类的默认成员函数 构造函数(constructor) 析构函数(destructor) 赋值运算符重载operator 二…

java maven

参考链接 maven相关配置 maven依赖管理 依赖具有传递性。 maven依赖范围 maven的生命周期 分为三个相互独立的生命周期&#xff1a; 在执行对应生命周期的操作时&#xff0c;需要进行前面的操作。比如&#xff0c;执行打包install的时候&#xff0c;会执行test。

嵌入式入门学习——8基于Protues仿真Arduino+SSD1306液晶显示数字时钟

0 系列文章入口 嵌入式入门学习——0快速入门&#xff0c;Let‘s Do It&#xff01; SSD1306 1 Protues查找SSD1306器件并放置在画布&#xff0c;画好电气连接&#xff08;这里VCC和GND画反了&#xff0c;后面仿真出错我才看见&#xff0c;要是现实硬件估计就烧毁了&#xf…

抖音快手提取COOKIE双参软件-修行者编程技术网

抖音快手提取COOKIE双参软件-修行者编程技术网 我们在软件开发的过程中首先要知道&#xff0c;什么是ck&#xff0c;什么是双参数 为什么会有ck&#xff0c;ck是否存在算法在其中 UI代码工程展示