欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > leetcode 684 冗余连接 题解

leetcode 684 冗余连接 题解

2024/10/28 11:10:24 来源:https://blog.csdn.net/ZXTpower/article/details/143272027  浏览:    关键词:leetcode 684 冗余连接 题解

前言

  这题用鸡毛并查集啊,直接 tarjan 求割边呗,为了水这篇题解,我还专门写了个 tarjan 的博客,嘿嘿。
tarjan 求割点和割边

题解

  当你求出来所有的割边之后,你就从后往前遍历所有的边,然后一个遇到的不是割边的边就是答案。

代码

const int maxn = 1005;class Solution {
public:int head[maxn], tot;Solution(){for (int i = 1; i <= 1000; i++)head[i] = 0;tot = 1;}struct edge{int to, nxt;}e[maxn * 2];void addedge(int u, int v){e[++tot].nxt = head[u];e[tot].to = v;head[u] = tot;}vector<int> findRedundantConnection(vector<vector<int>>& edges) {int N = edges.size();vector<int> vis(N + 10, 0), low(N + 10, 0), dfn(N + 10, 0);for (int i = 0; i < edges.size(); i++){int u = edges[i][0], v = edges[i][1];addedge(u, v); addedge(v, u);}int cnt = 0;auto tarjan = [&](auto&& tarjan, int x, int index_edge) -> void {low[x] = dfn[x] = ++cnt;for (int i = head[x]; i; i = e[i].nxt){int v = e[i].to;if (!dfn[v]){tarjan(tarjan, v, i);low[x] = min(low[v], low[x]);if (low[v] > dfn[x])vis[i / 2 - 1] = 1; }elseif (i != (index_edge ^ 1))low[x] = min(low[x], dfn[v]);}};tarjan(tarjan, 1, 1);for (int i = N - 1; i >= 0; i--)if (!vis[i])return edges[i];return edges[0];}
};

结果

结果




作者能力有限,如有问题请多多指教!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com