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 题解的更多相关文章

  1. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  2. Hdoj 1102.Constructing Roads 题解

    Problem Description There are N villages, which are numbered from 1 to N, and you should build some ...

  3. POJ2749:Building roads——题解

    http://poj.org/problem?id=2749 (这个约翰的奶牛真多事…………………………) i表示u与s1连,i+n表示u与s2连. 老规矩,u到v表示取u必须取v. 那么对于互相打架 ...

  4. CF543B Destroying Roads 题解

    看到没有题解就贡献一波呗 分析: 这题其实就是想让我们求一个图中两条最短路的最短(好把更多的边删掉). 我们先考虑一条最短路,别问我我怎么会的显然,就是s和t跑个最短路再用n-就行. 然后就是两条喽! ...

  5. 洛谷 P2872 [USACO07DEC]道路建设Building Roads 题解

    P2872 [USACO07DEC]道路建设Building Roads 题目描述 Farmer John had just acquired several new farms! He wants ...

  6. 洛谷 SP338 ROADS - Roads 题解

    思路 dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边).在有向图里表示表头结点指向其 ...

  7. LightOJ - 1162 Min Max Roads

    LightOJ - 1162 Min Max Roads 题解:在线倍增LCA和模拟ST表 让我们求从\(u->v\)最短路径上的边权最大值和边权最小值,那么我们可以利用倍增思想,类似其\(fa ...

  8. 【题解】Paid Roads [SP3953] [Poj3411]

    [题解]Paid Roads [SP3953] [Poj3411] 传送门:\(\text{Paid}\) \(\text{Roads}\) \(\text{[SP3953]}\) \(\text{[ ...

  9. 题解报告:poj 2631 Roads in the North(最长链)

    Description Building and maintaining roads among communities in the far North is an expensive busine ...

  10. Blocked Billboard II题解--模拟到崩溃的模拟

    前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...

随机推荐

  1. 基于GPT搭建私有知识库聊天机器人(一)实现原理

    1.成品演示 支持微信聊天 支持网页聊天 支持微信语音对话 支持私有知识文件训练,并针对文件提问 步骤1:准备本地文件a.txt,支持pdf.txt.markdown.ppt等 步骤2:上传a.txt ...

  2. unity协程(IEnumerator)开始和结束

    快速阅览: 一.结束协程无效:协程方法需要单独存一份地址,在开始和结束不直接传入方法名,而是使用这份保存的地址进行开始和结束. 二.再次开启协程时少跑了几行代码:再次开始同一个方法名的协程时,不是从第 ...

  3. Nginx之数据流代理stream模块简介和使用 ---九五小庞

    一.stream模块简介   stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文.ngx_stream_core_module模块从1.9.0 ...

  4. Git插件报错,Appears to be a git repo or submodule

    Hexo博客需要引入第三方插件,不少包作者误把包项目得.git文件上传到github,或者在插件的github路径下直接下载插件文件夹,结果是插件内含有.git文件,导致下载别的npm包时报错npm ...

  5. Windows查询进程和杀死进程

    查询进程 查询进程占用的端口(通过端口查询) netstat -ano |findstr "端口号" 杀死进程 通过进程号查看所属进程名称 tasklist |findstr &q ...

  6. 使用guestmount更改qcow2镜像内容

    参考: 使用guestmount更改qcow2镜像内容 guestmount 安装 yum install libguestfs libguestfs-tools -y 使用 guestmount - ...

  7. Selenium+2Captcha 自动化+验证码识别实战

    本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解.内容涵盖Selenium的基础知识.验证码的分类.2Captcha服务的使用,以及 ...

  8. 从壹开始前后端开发【.Net6+Vue3】

    项目名称:KeepGoing(继续前进) 1.1介绍 工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长 将以Girvs框架为基础,从壹开始二次开发一个前后端 ...

  9. N1nEmAn-2023集训wp

    week1 2022-12-28 WP 0x00 T1 reverse3 前几天没注意到要发wp,现在补一下.最近在学汇编,pwn题没做新的了.想到之前了解到hws的pwn会考花指令,听hjx他们说那 ...

  10. 华为云GaussDB(for Influx)单机版上线,企业降本增效利器来了

    本文分享自华为云社区<华为云GaussDB(for Influx)单机版上线,企业降本增效利器来了>,作者:GaussDB 数据库 . 1.背景 华为云GaussDB(for Influx ...