关注
B题是 双联通分量,用Tarjan扫一遍,重新建图然后减掉最深的两条路径 void tarjan(int u, int pre) //Tarjan强连通 { vis[u] = true; dfn[u] = low[u] = ++dep; st.push(u); fa[u] = true; for (int i = s[u]; ~i; i = edge[i].nxt) { int v = edge[i].v; if (edge[i].flag == false) continue; edge[i].flag = edge[i ^ 1].flag = false; if (!vis[v]) { tarjan(v, u); low[u] = min(low[u], low[v]); if (dfn[u]<low[v]) { bridge[bri_cnt][0] = u; bridge[bri_cnt++][1] = v; } } else if (fa[v]) low[u] = min(low[u], dfn[v]); } if (dfn[u] == low[u]) { int t; do { id[t = st.top()] = res; st.pop(); fa[t] = false; } while (t != u); res++; } } int dfs(int u, int pre) { int tmp = 0; for (int i = s[u]; ~i; i = edge[i].nxt) { int v = edge[i].v; if (v == pre) continue; int d = dfs(v, u); pre_d = max(pre_d, tmp + d); tmp = max(tmp, d); } return tmp + 1; }
查看原帖
点赞 1
相关推荐
查看3道真题和解析 点赞 评论 收藏
分享
05-25 18:01
华南理工大学 算法工程师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习生的蛐蛐区 #
1007941次浏览 5133人参与
# 扒一扒那些奇葩实习经历 #
160739次浏览 1183人参与
# 发面经攒人品 #
8904227次浏览 98766人参与
# 应届生第一份工资要多少合适 #
28279次浏览 108人参与
# 27届实习投递记录 #
166584次浏览 1682人参与
# 应届生,你找到工作了吗 #
181015次浏览 914人参与
# 招聘要求与实际实习内容不符怎么办 #
226859次浏览 1077人参与
# 机械人值得去的小众企业 #
38399次浏览 68人参与
# 现在入门AI首先要做什么? #
18340次浏览 145人参与
# 互联网行业现在还值得去吗 #
65725次浏览 380人参与
# 实习最想跑路的瞬间 #
147715次浏览 787人参与
# 面试反问你会问什么 #
213658次浏览 1962人参与
# 机械人,秋招第一次笔试的企业是哪家? #
106973次浏览 715人参与
# 万物皆可发面经 #
5620次浏览 67人参与
# AI了,我在打一种很新的工 #
211705次浏览 2353人参与
# 实习,不懂就问 #
231837次浏览 1771人参与
# 实习教会我的事 #
82296次浏览 521人参与
# 网易求职进展汇总 #
218840次浏览 1542人参与
# 春招前还要继续实习吗? #
72135次浏览 353人参与
# 校招求职有谈薪空间吗 #
234491次浏览 2400人参与