[ABC218F] Blocked Roads 题解
题目大意
给定一张 \(n\) 个点,\(m\) 条边的无向图,每条边的边权均为 \(1\)。对于每一个 \(i\in [1,m]\) 求出从点 \(1\) 到 \(n\) 的不经过第 \(i\) 条边的最短路长度。
思路分析
我们先在原图上求出从点 \(1\) 到点 \(n\) 的最短路,注意到最短路的路径长度不会超过 \(n-1\),这是因为每个点最多出现一次。
那么对于每一条边,如果它处于原图中从点 \(1\) 到点 \(n\) 的最短路径上,我们就把这条边删掉再跑一遍最短路得出答案,否则答案就是原本的最短路长度。
求一次最短路的时间复杂度是 \(O(n+m)\) 的,所以总时间复杂度是 \(O(n^2+nm)\),可以通过。
代码
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
using namespace std;
const int N=200100;
#define inf 0x3f3f3f3f
int n,m,in1,in2;
int dis[N],vis[N],pre[N];
vector<int> to[N];
set<pair<int,int>> s;
queue<int> q;
pair<int,int> edge[N];
int bfs(int notedge){//直接 bfs 求出最短路
for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0;
while(!q.empty()) q.pop();
q.push(1);dis[1]=0;
while(!q.empty()){
int now=q.front();q.pop();
if(vis[now]) continue;
vis[now]=1;
for(int v:to[now]){
if(edge[notedge]==make_pair(now,v)) continue;//直接跳过删除的边
if(dis[v]>dis[now]+1){
dis[v]=dis[now]+1;
q.push(v);
if(!notedge) pre[v]=now;
}
}
}
if(dis[n]==inf) return -1;
return dis[n];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&in1,&in2);
to[in1].push_back(in2);
edge[i]={in1,in2};
}
int len=bfs(0),x=n;
while(x!=1){//从 n 开始倒推
if(!pre[x]) break;
s.insert({pre[x],x});
x=pre[x];
}
for(int i=1;i<=m;i++)
if(s.count({edge[i].first,edge[i].second})) cout<<bfs(i)<<'\n';
else cout<<len<<'\n';
return 0;
}
[ABC218F] Blocked Roads 题解的更多相关文章
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- Hdoj 1102.Constructing Roads 题解
Problem Description There are N villages, which are numbered from 1 to N, and you should build some ...
- POJ2749:Building roads——题解
http://poj.org/problem?id=2749 (这个约翰的奶牛真多事…………………………) i表示u与s1连,i+n表示u与s2连. 老规矩,u到v表示取u必须取v. 那么对于互相打架 ...
- CF543B Destroying Roads 题解
看到没有题解就贡献一波呗 分析: 这题其实就是想让我们求一个图中两条最短路的最短(好把更多的边删掉). 我们先考虑一条最短路,别问我我怎么会的显然,就是s和t跑个最短路再用n-就行. 然后就是两条喽! ...
- 洛谷 P2872 [USACO07DEC]道路建设Building Roads 题解
P2872 [USACO07DEC]道路建设Building Roads 题目描述 Farmer John had just acquired several new farms! He wants ...
- 洛谷 SP338 ROADS - Roads 题解
思路 dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边).在有向图里表示表头结点指向其 ...
- LightOJ - 1162 Min Max Roads
LightOJ - 1162 Min Max Roads 题解:在线倍增LCA和模拟ST表 让我们求从\(u->v\)最短路径上的边权最大值和边权最小值,那么我们可以利用倍增思想,类似其\(fa ...
- 【题解】Paid Roads [SP3953] [Poj3411]
[题解]Paid Roads [SP3953] [Poj3411] 传送门:\(\text{Paid}\) \(\text{Roads}\) \(\text{[SP3953]}\) \(\text{[ ...
- 题解报告:poj 2631 Roads in the North(最长链)
Description Building and maintaining roads among communities in the far North is an expensive busine ...
- Blocked Billboard II题解--模拟到崩溃的模拟
前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...
随机推荐
- JavaCV人脸识别三部曲之三:识别和预览
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos <JavaCV人脸识别三部曲>链接 < ...
- selenium实战学习--定位元素
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common import ...
- 如何不加锁地将数据并发写入Apache Hudi?
最近一位 Hudi 用户询问他们是否可以在不需要任何锁的情况下同时从多个写入端写入单个 Hudi 表. 他们场景是一个不可变的工作负载. 一般来说对于任何多写入端功能,Hudi 建议启用锁定配置. 但 ...
- 【xx-job】 定时任务调度
XXL-JOB XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展. 现已开放源代码并接入多家公司线上产品线,开箱即用. 一.任务调度中心 1.1 下载XXL- ...
- 通配符SSL证书自动续签自动部署方案
最开始接触 https 的时候一直是使用的 阿里云和腾讯云的免费 SSL证书,免费的SSL证书用了几年后,慢慢的部署https证书的项目越来越多,时间久了发现每个网站都需要一个 SSL证书,每个SSL ...
- React:TypeError: Cannot read properties of undefined (reading 'map')
解决方案 js中?问号代表可选项 可选链式操作符 参考链接 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Oper ...
- [linux]frp内网穿透
前言 假设有如下网络拓扑 A可以访问B,但B无法访问A.A和B都能访问C.如果B需要访问A的8000端口,一般有如下方法: 网络管理员做路由转发.硬件层面网络转发,性能一般来说更好,但需要熟悉路由配置 ...
- 知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装 知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装 https:// ...
- 面霸的自我修养:synchronized专题
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>的第3弹,内容是Java并发编程中至关重要的关键字synchroni ...
- 番外1.ssh连接管理器
目录 本篇前瞻 项目背景 ssh连接管理器 优点 使用方式 配置 使用方法 快速开始 注意点 使用样例 本篇后记 本篇前瞻 学习完go语言基础的专栏,我们究竟写出怎么样的实用工具呢?我在github上 ...