关注
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
相关推荐
点赞 评论 收藏
分享
牛客热帖
正在热议
# 职场高情商速成班 #
2646次浏览 58人参与
# 实习生活中那些难忘的瞬间 #
7574次浏览 128人参与
# 被同事甩锅了怎么办 #
13955次浏览 88人参与
# 职场吐槽大会 #
110507次浏览 905人参与
# 那些拿到大厂offer的简历长啥样 #
174924次浏览 2791人参与
# 实习必须要去大厂吗? #
66527次浏览 1063人参与
# 机械制造薪资爆料 #
1153777次浏览 9426人参与
# 大学最后一个寒假,我想…… #
5711次浏览 89人参与
# 如果可以选,你最想去哪家公司 #
1345309次浏览 16701人参与
# 今年过年,你可以休息几天? #
4255次浏览 45人参与
# 如果公司降薪,你会跳槽吗? #
34501次浏览 275人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
16829次浏览 379人参与
# 上班后,你最大的变化是什么? #
21251次浏览 254人参与
# 如果实习可以转正,你会不会放弃秋招 #
384808次浏览 3439人参与
# offer帮选 #
1875178次浏览 14330人参与
# 我的实习求职记录 #
6510196次浏览 86366人参与
# 实习,投递多份简历没人回复怎么办 #
2660621次浏览 36342人参与
# 寒假躺平还是提前实习 #
121329次浏览 1028人参与
# 测测你的职业性格 #
29574次浏览 287人参与
# 投了多少份简历才上岸 #
268837次浏览 3013人参与