求桥,边双连通缩点 2022-01-10 图论 一个无向图,问最少添加多少条边使任意两点有两条不同路径。 即构造一个边双连通图,边双连通缩点后是一棵树,度数为1的点为a,结论是需要添加(a+1)/2条边。 【求桥,边双连通缩点】 #include #include #include #include #include #include #include #include #include #include #define ll long long #define ull unsigned long long #define debug puts("======"); #define inf (1<<30) #define eps 1e-8 using namespace std; const int MAXN=6005; const int MAXE=20005; struct Edge { int u, v; int next; } edge[MAXE]; int head[MAXN], tot; int n,m; int dfn[MAXN],low[MAXN]; bool vis_e[MAXE]; //是否访问了边 bool is_bridge[MAXE]; //是否是桥 int dfs_clock; int Block[MAXN]; //点所属边双 int block; //边双数 vectorvec[MAXN]; //缩点后图 bool vis[MAXN]; void init(int n) { memset(head, -1, sizeof(head[0])*(n+1)); tot = 0; } void addEdge(int u, int v) { edge[tot].u = u; edge[tot].v = v; edge[tot].next = head[u]; head[u] = tot++; } void dfs(int cur) { dfn[cur] = low[cur] = ++dfs_clock; for(int i = head[cur]; i!=-1; i = edge[i].next) { int tv = edge[i].v; if(!dfn[tv]) { vis_e[i] = vis_e[i^1] = true; //标记边可以处理重边 dfs(tv); low[cur] = min(low[cur], low[tv]); if(dfn[cur] < low[tv]) is_bridge[i] = is_bridge[i^1] = true; } else if(dfn[tv] < dfn[cur] && !vis_e[i]) { vis_e[i] = vis_e[i^1] = true; low[cur] = min(low[cur], dfn[tv]); } } } void find_bridge(int n) { dfs_clock = 0; memset(dfn, 0, sizeof(dfn[0])*(n+1)); memset(vis_e, 0, sizeof(vis_e[0])*tot); memset(is_bridge, 0, sizeof(is_bridge[0])*tot); for(int i = 1; i <= n; ++i) if(!dfn[i]) dfs(i); } void DFS(int u) { vis[u]=1; Block[u]=block; for(int i = head[u]; i!=-1; i = edge[i].next) { int v=edge[i].v; if(vis[v]||is_bridge[i]) continue; DFS(v); } } //不经过桥的情况下,dfs求出每个变双 void find_scc() { memset(vis,0,sizeof(vis)); block=0; for(int i=1; i<=n; i++) { if(!vis[i]) { ++block; vec[i].clear(); DFS(i); } } int deg[MAXN]; memset(deg,0,sizeof(deg)); for(int i=0; i 推荐阅读 江苏28所高校排名 江苏大学排行榜 忍界大战怎么打 忍界大战普通怎么打 使用Trimmomatic过滤低质量序列 仓鼠吃莴笋叶 仓鼠吃莴笋能补充水分吗?! 打磨翡翠用什么 打磨翡翠用什么胶水粘接 转型中的博弈(医学影像人工智能落地基层为何这么难()) 精灵宝可梦剑盾冠军怎么打 国家卫健委|国家卫健委:重点人群除开展疫苗接种外 还要坚持做好个人防护 黄精是补肾阴虚还是阳虚 刘韦伯名字打分95分 做人做事就两个字 j2ee架构分析 steam余额给别人教程 减肥怎样运动才好得快 减肥怎样运动才好 哪些补益食疗方可缓解失眠 国赫天玺二期规划 天玺国际 黄芪配什么比较好 ps网页,ps怎么做网页 辣椒酱的几种做法 辣椒酱常见做法 阴阳师一速多少合格 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...) 玩一玩|超立方体及其可视化(Processing) #|【牛客】牛客练习赛67-E-牛妹游历城市——位运算优化 图论|POJ1364 King 差分约束 图论|tarjan算法之——割点和桥 Codeforces 1076D Edge Deletion——最短路+dfs 线段树|FZU - 2277(树链剖分或dfs序+线段树) 贪心|Codeforces D. Solve The Maze (bfs & 贪心) (Round #648 Div.2) online|hdu4115Eliminate the Conflict