AT ARC092F Two Faced Edges
题意:给定一个有向图,保证无重边自环,求将图中的每条边反向后强联通分量的个数是否会改变。
数据范围:$n$ $≤$ $1e3$,$m$ $≤$ $2e5$。
首先考虑一条边的影响。
因为一条边只能连接两个点,因此将一条边反向至多只能影响它两个端点在强联通分量里的变化,即整体增加一个强联通分量,或整体减少一个强联通分量(或整体不变)。
再考虑将这条边反向之前,两端点 $u$,$v$ 之间的联通情况。
假设这条边为 $u$ $→$ $v$,那么将这条边反向,在图中就可以看作增加一条 $v$ $→$ $u$ 的边,删掉一条 $u$ $→$ $v$ 的边。
那么在删边和添边之前,考虑 $4$ 种情况。
- 存在一条 $u$ $→$ $v$ 的路径,且其中不包含 $u$ $→$ $v$ 这条边;存在一条 $v$ $→$ $u$ 的路径;
- 存在一条 $u$ $→$ $v$ 的路径,且其中不包含 $u \to v$ 这条边;不存在一条 $v$ $→$ $u$ 的路径;
- 不存在不经过 $u$ $→$ $v$ 这条边的一条 $u$ $→$ $v$ 的路径 ;存在一条 $v$ $→$ $u$ 的路径;
- 不存在不经过 $u$ $→$ $v$ 这条边的一条 $u$ $→$ $v$ 的路径 ;不存在一条 $v$ $→$ $u$ 的路径;
稍加分析就能得出在整体增加一个强联通分量的时候,是情况 $2$;在整体减少一个强联通分量的时候,是情况 $3$。
原图中是否存在一条 $v \to u$ 的路径只需在原图中爆搜一遍即可。
考虑如何判断是否存在不经过 $u$ $→$ $v$ 这条边的一条 $u$ $→$ $v$ 的路径。
显然一个最暴力的思路就是枚举每条边,打个 $\text{tag}$ 后在图中爆搜,复杂度 $O(m^2)$。
这里复杂度爆炸的原因就是每条边的枚举,因为在图中爆搜是无法避免的,因此把枚举每条边改为枚举每个点 $a$ 试试。
$a$ 不走 $a \to b$ 这条边想要到达 $b$,只需要在不走环的情况下第一条边不走 $a \to b$ 这条边就行了,而若 $a$ 不走 $a \to b$ 这条边,那么相当于 $a$ 可以走除了 $b$ 以外的后继节点。
考虑将问题转化为 $a$ 的后继节点能够被 $a$ 的其他后继节点到达(在不在 $a$ 处走环的情况下,这个可以通过给 $a$ 打个标记等等办法特判)。
当然这个还是需要枚举 $a$ 的出边因此复杂度没有任何改进,进而考虑再将问题转化为 $a$ 的后继节点能够两两到达。
但是这个转化是不对等的,因为后者是前者的充分不必要条件,其实每个点只需要被另 $1$ 个点到达就行了。
这就转换为了一个点集中的点能否被其中的另一个点到达的问题,因此考虑用多源 $\text{bfs}$ 实现,但是因为环的缘故,每个点有可能自己到达自己,因此在被访问的时候要记录一下访问它的点集中的点是谁(这里需要记录两个),同时每个点可以两次入队。
不过由于本人常数过大的缘故,需要使用 $\text{bitset}$ 优化。
code:Submission #34083578 - AtCoder Regular Contest 092
AT ARC092F Two Faced Edges的更多相关文章
- @atcoder - ARC092F@ Two Faced Edges
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给出一个有向图,对每条边都做一次询问: 翻转这条边后,对原图的强 ...
- AT3945-[ARC092D]Two Faced Edges【dfs】
正题 题目链接:https://www.luogu.com.cn/problem/AT3945 题目大意 \(n\)个点\(m\)条边的一张图,对于每条边求它翻转后强连通分量数量是否变化. \(1\l ...
- AT3945 [ARC092D] Two Faced Edges
要求,翻转一条边,强连通分量个数是否会改变. 考虑连通分量个数会改变的因素: 即\(v\to u\)是否成立,以及翻转前,是否有一条\(u \to v\)的路径不经过该条边 以上当只有一个满足时,连通 ...
- Atcoder Regular Contest 092 D - Two Faced Edges(图论+bitset 优化)
Atcoder 题面传送门 & 洛谷题面传送门 orz ymx,ymx ddw %%% 首先既然题目要我们判断强连通分量个数是否改变,我们首先就将原图 SCC 缩个点呗,缩完点后我们很自然地将 ...
- Atcoder 乱做
最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...
- 【AtCoder】ARC092
C - 2D Plane 2N Points 把能连边的点找到然后跑二分图匹配即可 #include <bits/stdc++.h> #define fi first #define se ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 092 C D E F
C - 2D Plane 2N Points 题意 二维平面上有\(N\)个红点,\(N\)个蓝点,一个红点和一个蓝点能配成一对当且仅当\(x_r<x_b\)且\(y_r<y_b\). 问 ...
- He faced a maximum sentence of three years.
Police raided his home in August and found more than 100g of marijuana. He faced a maximum sentence ...
- Effective Java Item2:Consider a builder when faced with many constructor parameters
Item2:Consider a builder when faced with many constructor parameters 当构造方法有多个参数时,可以考虑使用builder方式进行处理 ...
随机推荐
- CSS渐变样色的字
width: 118px; height: 17px; font-size: 13px; font-family: MicrosoftYaHei-Bold, MicrosoftYaHei; font- ...
- 小程序Day01
注册一个微信小程序账号测试号不能用云开发 构建npm(下载node.js) npm i @vant/weapp -S --production if wrong npm init//npm intal ...
- 百题计划-2 codeforces1185D Extra Element 暴力
https://codeforces.com/contest/1185/problem/D 题意:给一个序列,移除一个数然后排序后使得序列成为等差数列,求移除的下标. 解法: 先排序,把所有差值扔到m ...
- 线性斜压模式LBM学习&安装实录
本文基本参照了LBM的用户手册进行. 环境:Ubuntu 18.04LTS (Windows Subsystem Linux) 编译器:gfortran 7.5.0 安装包: lapack-3.9.0 ...
- RSTP-快速生成树协议
1 STP的不足之处STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量. 2 RSTP概述RSTP在许多方面对STP进行了优化,它的收敛速度更快,而且能够兼容STP. 通过接口 ...
- 吴恩达老师机器学习课程chapter07——聚类
吴恩达老师机器学习课程chapter07--聚类 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十三章. 缺少重要推演,只能作为 ...
- C语言学习--指针函数与函数指针
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指 ...
- 使用VS Code打造完美的嵌入式IDE
参考这个博主https://blog.csdn.net/qq_34245464/article/details/100769643的博文, 使用VS Code再重新打造一次完美的嵌入式IDE平台. 前 ...
- SDCC 学习
单个led.c文件 #include <stdbool.h> __sfr __at(0xb0) P3; __sfr __at(0x88) TCON; __sfr __at(0x89) TM ...
- (转).Net Web开发技术栈
作者:小曾出处:http://www.cnblogs.com/1996V/p/7700087.html 有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什 ...