news 2026/5/9 8:15:31

打卡信奥刷题(3232)用C++实现信奥题 P8436 【模板】边双连通分量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3232)用C++实现信奥题 P8436 【模板】边双连通分量

P8436 【模板】边双连通分量

题目描述

对于一个nnn个节点mmm条无向边的图,请输出其边双连通分量的个数,并且输出每个边双连通分量。

输入格式

第一行,两个整数nnnmmm

接下来mmm行,每行两个整数u,vu, vu,v,表示一条无向边。

不保证图为简单图,图中可能有重边和自环。

输出格式

第一行一个整数xxx表示边双连通分量的个数。

接下来的xxx行,每行第一个数aaa表示该分量结点个数,然后aaa个数,描述一个边双连通分量。

你可以以任意顺序输出边双连通分量与边双连通分量内的结点。

输入输出样例 #1

输入 #1

5 8 1 3 2 4 4 3 1 2 4 5 5 1 2 4 1 1

输出 #1

1 5 1 5 4 2 3

输入输出样例 #2

输入 #2

5 3 1 2 2 3 1 3

输出 #2

3 3 1 3 2 1 4 1 5

输入输出样例 #3

输入 #3

6 5 1 3 2 4 1 2 4 6 2 3

输出 #3

4 3 1 2 3 1 4 1 5 1 6

输入输出样例 #4

输入 #4

7 8 1 3 2 4 3 5 2 5 6 4 2 5 6 3 2 7

输出 #4

3 1 1 5 2 5 3 6 4 1 7

说明/提示

样例四解释:

相同颜色的点为同一个连通分量。


数据范围:
对于100%100\%100%的数据,1≤n≤5×1051 \le n \le 5 \times10 ^51n5×1051≤m≤2×1061 \le m \le 2 \times 10^61m2×106

subtasknnnmmm分值
1111≤n≤1001 \le n \le 1001n1001≤m≤5001 \le m \le 5001m500252525
2221≤n≤50001 \le n \le 50001n50001≤m≤5×1041 \le m \le 5 \times 10^41m5×104252525
3331≤n≤2×1051 \le n \le 2\times 10^51n2×1051≤m≤5×1051 \le m \le 5\times 10^51m5×105252525
4441≤n≤5×1051 \le n \le 5 \times10 ^51n5×1051≤m≤2×1061 \le m \le 2 \times 10^61m2×106252525

数据更新

  • 2022/7/142022/7/142022/7/14加强数据
  • 2022/11/262022/11/262022/11/26新增101010组较小的数据(1≤n,m≤101\le n, m \le 101n,m10),方便选手调试。
  • 2022/12/312022/12/312022/12/31重组subtasksubtasksubtask,并加入若干组极端数据。
  • 2023/1/12023/1/12023/1/1发现昨天新加入的数据数据出了问题,已修改。

本题不卡常,时间限制与空间限制均已开大,正确的解法均可通过。


惊喜:AC 后记得把鼠标放到测试点上看反馈信息,有惊喜哦。

C++实现

#include<bits/stdc++.h>usingnamespacestd;#defineMAXN500001intn,m,u,v,cnt;intdfn[MAXN],low[MAXN];vector<pair<int,int>>e[MAXN];vector<vector<int>>ans;stack<int>st;voidtarjan(intx,intlas){low[x]=dfn[x]=++cnt;st.push(x);for(autoi:e[x]){if(i.second==(las^1))continue;if(!dfn[i.first]){tarjan(i.first,i.second);low[x]=min(low[x],low[i.first]);}elselow[x]=min(low[x],dfn[i.first]);}if(dfn[x]==low[x]){vector<int>vec;vec.push_back(x);while(st.top()!=x){vec.push_back(st.top());st.pop();}st.pop();ans.push_back(vec);}}intmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;for(inti(1);i<=m;++i){cin>>u>>v;e[u].push_back(make_pair(v,i<<1));e[v].push_back(make_pair(u,i<<1|1));}for(inti(1);i<=n;++i){if(!dfn[i])tarjan(i,0);}cout<<ans.size()<<'\n';for(autoi:ans){cout<<i.size()<<' ';for(autoj:i)cout<<j<<' ';cout<<'\n';}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 8:14:30

Vale编译器构建系统详解:跨平台编译与依赖管理终极指南

Vale编译器构建系统详解&#xff1a;跨平台编译与依赖管理终极指南 【免费下载链接】Vale Compiler for the Vale programming language - http://vale.dev/ 项目地址: https://gitcode.com/gh_mirrors/val/Vale Vale编译器是一款高性能、内存安全的编程语言编译器&…

作者头像 李华
网站建设 2026/5/9 8:14:30

如何用AKShare快速搞定金融数据获取?终极实战指南

如何用AKShare快速搞定金融数据获取&#xff1f;终极实战指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/akshar…

作者头像 李华
网站建设 2026/5/9 8:07:39

node-redis性能优化宝典:提升Redis操作效率的20个终极技巧

node-redis性能优化宝典&#xff1a;提升Redis操作效率的20个终极技巧 【免费下载链接】node-redis Redis Node.js client 项目地址: https://gitcode.com/gh_mirrors/no/node-redis node-redis是Node.js生态中最强大的Redis客户端之一&#xff0c;专为现代高性能应用设…

作者头像 李华
网站建设 2026/5/9 8:05:30

量子计算中的上下文效应与动态电路验证

1. 量子计算中的上下文效应&#xff1a;从基础到高阶量子计算的核心挑战之一在于量子系统对测量历史的敏感性&#xff0c;这种特性被称为上下文效应。在经典计算中&#xff0c;一个比特的状态是确定的0或1&#xff0c;测量不会改变其状态。而量子比特则完全不同——测量行为本身…

作者头像 李华
网站建设 2026/5/9 8:04:31

SLING性能优化:5个技巧提升解析速度和准确性

SLING性能优化&#xff1a;5个技巧提升解析速度和准确性 【免费下载链接】sling SLING - A natural language frame semantics parser 项目地址: https://gitcode.com/gh_mirrors/sling1/sling SLING作为一款自然语言框架语义解析器&#xff0c;其解析速度和准确性直接影…

作者头像 李华
网站建设 2026/5/9 8:04:29

AMD MI325X加速器与大模型推理优化实践

1. AMD MI325X硬件平台与大模型推理特性解析AMD MI325X作为专为AI负载设计的加速器&#xff0c;其硬件架构对大模型推理性能有着决定性影响。该平台采用CDNA 3架构&#xff0c;单卡配备256GB HBM3e内存和6.0TB/s内存带宽&#xff0c;8卡集群可提供2TB聚合内存和48TB/s总带宽。这…

作者头像 李华