【SSL 1456】翻转有向图(dfs)

翻转有向图

题目链接:SSL 1456

题目大意

有一个有向图,没有重边自环,对于每条边,问你如果把它方向翻转,是否会改变图的强连通分量个数。

思路

考虑分类的一个讨论,分强连通分量内的边以及两两之间的边。

那如果是内部的边,那我们就想让他只有这一条边从这一部分到那一部分,不希望有别的边。
那如果是外部的边,我们希望还有这么一个别的路径它可以从这一部分到那一部分。

那不难想象我们就是只需要求是否还有一条别的路径可以代替这条边。
(因为判断内外部的边是容易的,你甚至不用缩点,看看能不能 y 走到 x 就行)

那你考虑用一个 dfs 去搜,枚举起点,然后记录第一条走的边,然后你走边的时候一个按顺序,另一个反过来的顺序,那如果有多条从不同边出发的路径的话,你两种跑法先到点的肯定是用不同的路径。
那你这样就可以判断是否有多条路径了。

代码

#include<cstdio> #include<vector> #include<cstring> using namespace std; const int N = 1005; const int M = 2e5 + 100; int n, m, f1[N][N], f2[N][N], X[M], Y[M]; vector <int> G[N]; bool in[N][N]; void Run1(int now, int beg, int S) { in[S][now] = 1; for (int i = 0; i < G[now].size(); i++) if (!in[S][G[now][i]]) { f1[S][G[now][i]] = beg; Run1(G[now][i], beg, S); } } void Run2(int now, int beg, int S) { in[S][now] = 1; for (int i = G[now].size() - 1; i >= 0; i--) if (!in[S][G[now][i]]) { f2[S][G[now][i]] = beg; Run2(G[now][i], beg, S); } } int main() { freopen("turn.in", "r", stdin); freopen("turn.out", "w", stdout); scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) { int x, y; scanf("%d %d", &x, &y); X[i] = x; Y[i] = y; G[x].push_back(y); } for (int i = 1; i <= n; i++) { in[i][i] = 1; for (int j = 0; j < G[i].size(); j++) Run1(G[i][j], G[i][j], i); memset(in[i], 0, sizeof(in[i])); in[i][i] = 1; for (int j = G[i].size() - 1; j >= 0; j--) Run2(G[i][j], G[i][j], i); } for (int i = 1; i <= m; i++) { if (in[Y[i]][X[i]]) { if (f1[X[i]][Y[i]] != f2[X[i]][Y[i]]) printf("same\n"); else printf("diff\n"); } else { if (f1[X[i]][Y[i]] == f2[X[i]][Y[i]]) printf("same\n"); else printf("diff\n"); } } return 0; }

__EOF__

本文作者あおいSakura
本文链接https://www.cnblogs.com/Sakura-TJH/p/SSL_1456.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   あおいSakura  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-10-31 【luogu P4720】【模板】扩展卢卡斯定理/exLucas(数论)(CRT)
2021-10-31 【LGR-096】洛谷 11 月月赛 I Div.2 题解
点击右上角即可分享
微信分享提示